我想通过脚本从SSID动态更改OpenWRT wifi网络名称,该脚本从互联网获取信息。
因为从互联网上获取的信息可能包含多字节字符,所以它很容易被截断为无效的UTF-8字节序列,因此我想使用awk(busybox)来修复它。但是,当我尝试对String和整数使用按位函数and
时,结果始终返回0
。
awk 'BEGIN{v="a"; print and(v,0xC0)}'
如何将字符串中的字符视为awk中的整数,就像在C / C ++中一样? char p[]="abc"; printf ("%d",*(p+1) & 0xC0);
答案 0 :(得分:2)
您可以制作这样的ord
函数 - 大量借用GNU Awk用户指南 - here
#!/bin/bash
awk '
BEGIN { _ord_init()
printf("ord(a) = %d\n", ord("a"))
}
function _ord_init( low, high, i, t)
{
low = sprintf("%c", 7) # BEL is ascii 7
if (low == "\a") { # regular ascii
low = 0
high = 127
} else if (sprintf("%c", 128 + 7) == "\a") {
# ascii, mark parity
low = 128
high = 255
} else { # ebcdic(!)
low = 0
high = 255
}
for (i = low; i <= high; i++) {
t = sprintf("%c", i)
_ord_[t] = i
}
}
function ord(str,c)
{
# only first character is of interest
c = substr(str, 1, 1)
return _ord_[c]
}'
<强>输出强>
ord(a) = 97
答案 1 :(得分:0)
我不知道你的意思是不是你的意思,因为你没有提供样本输入和预期的输出,但是用GNU awk看看这个,也许它会帮助:
$ gawk -lordchr 'BEGIN{v="a"; print v " -> " ord(v) " -> " chr(ord(v))}'
a -> 97 -> a