#独家
awk中使用sprintf(“%d”, “a”)获取字符的ASCII值,为什么返回的是0?

2023-08-09 0 1,754

之前写的一段数据处理的代码发现结果有问题,最后排查是这段获取字符的ASCII值的方法出问题了。
试了下
echo "" | awk '{print sprintf("%d", "a"), sprintf("%c", 97)}'
结果是 0 a
为什么用"%c"把ASCII码值转字符没问题,用"%d"反过来就不行了?

因为你用了一般语言的代码逻辑去解释 awk 脚本。

在 awk 脚本中,”%d” 的含义是将字符串转化为对应的整数。
echo "" | awk '{print sprintf("%d", "5666")}' 输出 5666
echo "" | awk '{print sprintf("%d", "5666.1")}' 输出 5666
echo "" | awk '{print sprintf("%d", "05666.1")}' 输出 5666
echo "" | awk '{print sprintf("%d xx", "056x66")}' 输出 56
echo "" | awk '{print sprintf("%d xx", "x056x66")}' 输出 0

解决方法1

echo a | awk ‘BEGIN{for(n=0;n<256;n++)ord[sprintf(“%c”,n)]=n}{print ord[$1]}’

解决方法2

我自己想出来的办法,也结合了上面 stackoverflow 的其它答案:
echo "" | awk '{system("printf \"%d\" \"\047a\"")}'

  • system 表示执行系统命令
  • 需要执行的是 printf "%d" "'a"
  • 这个单引号是必须要的,但是 awk 中不能直接使用,因此使用 \047 代替。
  • echo “a” | awk ‘{print ord($0)}’
  • function ord(str) {
  • return sprintf(“%d”, index(“abcdefghijklmnopqrstuvwxyz”, str))
  • }
  • 或者
  • printf “%d\n” “‘a”
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 awk中使用sprintf(“%d”, “a”)获取字符的ASCII值,为什么返回的是0? https://www.jkxiazai.com/2449.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务