echo输出数据时如何把数据转换为16进制并输出,不使用printf
时间: 2024-03-01 09:54:04 浏览: 227
可以使用`echo`命令的`-n`选项和`-e`选项来输出16进制数据。具体操作如下:
```
data=1234 # 假设数据为1234
echo -n -e "\\x$(printf %02X $(($data / 256)))\\x$(printf %02X $(($data % 256)))\n"
```
输出结果为:
```
\x04\xD2
```
其中,`printf %02X`将数据转换为2位16进制数,不足2位的前面补0,例如将4转换为04,将13转换为0D。`$data / 256`和`$data % 256`分别表示将数据拆分为高8位和低8位。
如果要输出多个数据,可以使用空格将它们隔开,例如:
```
data1=1234
data2=5678
echo -n -e "\\x$(printf %02X $(($data1 / 256)))\\x$(printf %02X $(($data1 % 256))) \\x$(printf %02X $(($data2 / 256)))\\x$(printf %02X $(($data2 % 256)))\n"
```
输出结果为:
```
\x04\xD2 \x16\x2E
```
这样就可以使用`echo`命令输出16进制数据了。不过相比较而言,`printf`命令更加方便、简洁。
相关问题
echo 如何把数据转换为16进制并输出
可以使用`printf`命令将数据转换为16进制并输出。具体操作如下:
```
data=1234 # 假设数据为1234
printf "data: 0x%X\n" $data # 将数据转换为16进制并输出
```
输出结果为:
```
data: 0x4D2
```
其中,`%X`是格式控制符,表示将数据转换为16进制并输出,`0x`表示在输出结果前添加0x前缀。
如果要输出多个数据,可以使用空格将它们隔开,例如:
```
data1=1234
data2=5678
printf "data1: 0x%X, data2: 0x%X\n" $data1 $data2
```
输出结果为:
```
data1: 0x4D2, data2: 0x162E
```
这样就可以将数据转换为16进制并输出了。
shell命令调取test.log第1行第5-7个字符为sender,sender的数值转换为16进制命名为senderx,输出senderx
可以使用以下命令实现:
```
sender=$(sed -n '1s/\(.\{4\}\)\(.\{3\}\)/\2/p' test.log)
senderx=$(printf "%x\n" $sender)
echo $senderx
```
解释一下命令:
- `sed -n '1s/\(.\{4\}\)\(.\{3\}\)/\2/p' test.log`:这个命令会从 `test.log` 文件中取出第一行,然后将第五到第七个字符提取出来,存储到变量 `sender` 中。
- `printf "%x\n" $sender`:这个命令会将变量 `sender` 的值转换为 16 进制,并输出结果。
- `echo $senderx`:这个命令会将变量 `senderx` 的值输出到终端上。