RS232経由で受信したASCII文字の値を取得して、それらをバイナリのような値に変換しようとしています。
例:
0xFF-->########
0x01--> #
0x02--> #
...
私の問題は、127 より大きい ASCII 文字の値を取得することです。
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
したがって、値を unsigned int に変換する私のソリューションは次のようになります。
if(ord($0)<0)
{
new_char=ord($0)+256;
}
else new_char = ord($0)+0`
しかし、gawkでint
asを直接キャストする方法があるかどうか知りたかったのです。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)