代码之家  ›  专栏  ›  技术社区  ›  gutelfuldead

使用xxd将整数转换为二进制

  •  1
  • gutelfuldead  · 技术社区  · 10 年前

    我有一个文件,输出。log,它有一个空格列表“”,分隔范围为[-20482048]的整数。我正试图用xxd将其转换为二进制文件。我在使用命令,

    xxd -r -p output.log > output.bin
    

    然而,当我用xxd读回文件时,我会丢失所有符号(-),并收到一些大于2048的值。有更好的方法吗?谢谢

    编辑:使用示例数据。。。

    $ cat test
    4 0 -3 -2 -1 200
    
    $ xxd -r -p test > test.bin
    
    $ xxd test.bin
    0000000: 4012 00            @..
    

    也许我误解了xxd正在做什么,在最后一个命令之后,我期望看到的是看到我的原始输入数据被显示回来。这不正确吗?

    对于更大的数据集,我会不时看到正确的值,但输出中仍有大量噪音。

    1 回复  |  直到 10 年前
        1
  •  2
  •   xxfelixxx    10 年前

    输入源文件中可能有一些奇怪的字符, xxd 对数字很有用。尝试使用八进制转储查看数据 od -c input 去寻找任何奇怪的东西。

    $ echo '-3000 -2048 -1 0 1 2048 3000' > foo.input
    $ cat foo.input
    -3000 -2048 -1 0 1 2048 3000
    $ xxd foo.input > foo.hex
    $ cat foo.hex
    0000000: 2d33 3030 3020 2d32 3034 3820 2d31 2030  -3000 -2048 -1 0
    0000010: 2031 2032 3034 3820 3330 3030 0a          1 2048 3000.
    $ xxd -r foo.hex > foo.output
    $ cat foo.output
    -3000 -2048 -1 0 1 2048 3000