我正在尝试获取通过 RS232 接收到的 ASCII 字符的值,以将它们转换为类似二进制的值。
例子:
0xFF-->########
0x01--> #
0x02--> #
...
我的问题是让 ASCII 字符的值高于 127。
获取 int 值的测试代码:
echo -e "\xFF" | gawk -l ordchr -e '{printf("%c : %i", ord($0),ord($0))}'
返回:
� : -1
测试代码 2:
echo -e "\x61" | gawk -l ordchr -e '{printf("%c : %i", ord($0),ord($0))}'
返回:
a : 97
所以我将值转换为无符号整数的解决方案是这样的:
if(ord($0)<0)
{
new_char=ord($0)+256;
}
else new_char = ord($0)+0`
但我想知道是否有办法直接在 gawk 中int
投射uint
。
后来我尝试编写自己的ord()
函数。
#!/bin/bash
echo -e "\xFF" | awk 'BEGIN {_ord_init()}
{
printf("%s : %d\n", $0, ord($0))
}
function _ord_init( i, t)
{
for (i=0; i <= 255; 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]
}'
0xFF
返回:
� : 0
0x61
返回:
a : 97
有人可以解释我的行为吗?
我在用着:
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4-p1, GNU MP 6.1.1)