【发布时间】:2014-08-15 23:29:06
【问题描述】:
使用 ash,我有一个 IP 地址作为变量
IP_ADDR=192.168.1.234
我想将这 4 个字节写入二进制文件,然后重新读取它们并重新调整 IP 字符串。
我有以下可行的解决方案,但它似乎很老套 - 有更好的建议吗?
写:
IP_ADDR=192.168.1.234
serialHex=`printf '%02X' ${IP_ADDR//./ } | sed s/'\(..\)'/'\\\\x\1'/g`
echo -n -e $serialHex | dd bs=1 of=/path/to/file seek=19 &> /dev/null
注意 seek=19 表示在二进制文件(字节 19)中写入的位置
阅读:
hexValues=`od -j 19 --read-bytes=4 --address-radix=n -t x1 /path/to/file`
set $hexValues
for w; do echo -n "$((0x$w))."; done | sed s/.$//
【问题讨论】:
-
"Note seek=19...' -- 你今天不在乎,但如果你希望 C 程序读取这个文件,那么你应提前计划并将此 32 位值与 32 位对齐(例如使用字节偏移 20)对齐。多字节二进制数据应对齐以方便读取数据结构,尤其是在 RISC 拱门上。
标签: linux shell ip busybox ash