当前位置: 首页 > 面试题库 >

如何使用Bash将整数写入二进制文件?[重复]

茅才
2023-03-14
问题内容

我需要将文件的大小写入二进制文件。例如:

$ stat -c %s in.txt 
68187

$ stat -c %s in.txt >> out.bin

与其将“ 68187”字符串写入out.bin,我想将168187的4字节int表示形式写入out.bin。

如何将“ 68187”转换为4字节整数?


问题答案:

这是我能想到的:

int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file

现在,根据字节顺序,您可能需要交换字节顺序:

printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file

示例(已解码,因此可见):

printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000                                ....

这用于 无符号的 int,如果int是有 符号的并且 值是 负数 ,则必须计算两者的补数。简单的数学。



 类似资料:
  • 问题内容: 我有23位表示为字符串,并且需要将此字符串作为4个字节写入二进制文件。最后一个字节始终为0。以下代码有效(Python 3.3),但感觉不太好(我对Python和编程很陌生)。您有任何改善技巧吗?似乎for循环可能有用,但是如何在循环中进行切片而不出现IndexError?请注意,当我将位提取到一个字节中时,我会反转位顺序。 问题答案: 您可以将其视为int,然后按以下方式创建4个字节

  • 我想以这种形式将短int x=0x4740写入二进制文件:0100 0000 0100 0111,当我在记事本中打开它时,它是@G。它正在工作。当我尝试编写例如短int a=0xf0ff;(二进制:1111 0000 1111 1111)时,记事本显示给我的不是我的数字二进制(➕是1100 1011 1001 1001 1100 0100 1001 0001)。如何在这个文件中编写它并获得1111

  • 我使用模块连接到返回PNG图像的php脚本。如果我这样做: 但是它在编写时给出了UnicodeEncodeError,所以我使用了而不是。文件已创建,但我无法在图像查看器中查看它(它会出错)。但是,如果我右键单击并在Firefox中保存该脚本返回的PNG,我可以在保存后在同一图像查看器中查看它。所以我猜我将图像数据写入文件的方式有问题。还有别的办法吗?

  • 我想编程一个16/32位的EEPROM。我正在用C程序编写这个文件,但是似乎只执行8位?我写了一个简单的例子,使用xxd(和hextump)查看结果,但文件似乎只有8位。我想知道是否由于hexdump的限制,我只能看到8位 有人知道我如何检查所有的位都被写入文件吗? 使用xxd我看到: 编辑:我试图确保有32位写入文件。xxd的结果是: 其中显示有16位用于,但其他16位在哪里?理想情况下,我希望

  • 问题内容: 我有一些从Go程序中读取的文本文件。我想提供一个可执行文件,而无需另外提供该文本文件。如何将其嵌入Windows和Linux上的编译中? 问题答案: 使用go-bindata。从自述文件: 该工具可将任何文件转换为可管理的Go源代码。对于将二进制数据嵌入到go程序中很有用。在转换为原始字节片之前,可以选择对文件数据进行gzip压缩。

  • 问题内容: 我有一个字节列表作为整数,这类似于 如何将此列表作为二进制文件写入文件? 这行得通吗? 问题答案: 这正是用于: 如果您使用的是Python 3.x,则可以改用(也许应该这样做,因为它可以更好地表明您的意图)。但是在Python 2.x中,这是行不通的,因为它只是的别名。像往常一样,使用交互式解释器进行显示比使用文本进行解释要容易,所以让我这样做。 Python 3.x: Python