我正在使用for循环遍历字符串中的十六进制数字。我可以提取每个十六进制数字,但是我要转换为数字的代码给出了奇怪的值。我该如何解决此代码?
脚本:
#!/bin/bash
mystring="5e51584a4c"
for (( i = 0; i < ${#mystring}; i = i + 2)); do
snumber="${mystring:i:2}"
printf "number as string=%s\n" $snumber
number=$(printf "%x" "'${mystring:i:2}")
printf "number=%d\n" $number
done
我得到以下输出:
number as string=5e
number=35
number as string=51
number=35
number as string=58
number=35
number as string=4a
number=34
number as string=4c
number=34
答案 0 :(得分:4)
十六进制数字必须带有0x
前缀:
printf "%d\n" 0x5e
输出:
94
mystring="5e51584a4c"
for (( i = 0; i < ${#mystring}; i = i + 2)); do
snumber="${mystring:i:2}"
printf "number=%d\n" 0x$snumber
done
答案 1 :(得分:4)
在这种情况下,您不需要int main()
{
int in_count =0;
printf("Inorder traversal of the given tree \n");
inorder(root, &in_count);
}
,可以使用bash的printf
构造。
$((base#number))
答案 2 :(得分:3)
您的printf
命令正在打印每个子字符串中第一个数字的字符代码,因为参数的前缀为'
。您需要使用0x
前缀。
以十六进制打印时,可以使用%#x
转换来使printf
发出下一个用法所需的前导0x
前缀:
number=$(printf '%#x' "0x${mystring:i:2}")
# ^^^ ^^