gpt4 book ai didi

c++ - 使用 hexdump 输出 64 位整数

转载 作者:太空狗 更新时间:2023-10-29 20:57:19 30 4
gpt4 key购买 nike

我目前正在处理一些二进制数据。为了检查和调试我的应用程序以前生成的数据,我使用了 hexdump,面临 hexdump 似乎无法提取 64 位整数字段的障碍。给定以下最小示例:

#include <iostream>
#include <fstream>
#include <cstdint>

int main(int argc, char** argv){
std::ofstream os("tmp.bin", std::ios::out | std::ios::binary);
uint64_t x = 7;
os.write((char*)&x,sizeof(uint64_t));
os.close();
return 0;
}

我在我的系统上执行了一个简单的 hexdump:

hexdump tmp.bin

> 0000000: 0007 0000 0000 0000
> 0000008:

现在尝试提取 64 位宽度的 unsigned int 产量:

hexdump -e '/8 "%u"' tmp.bin

> hexdump: bad byte count for conversion character u

根据写得好的hexdump-manual by David Mair应该可以做到,但我没有成功。

我错过了什么?

最佳答案

我们的最终解决方法如下:

x=`hexdump -n 8 -e '2/4 "%08X " "\n"' {FILENAME} | awk 'BEGIN{printf "0x"}{print $2$1}'`
echo $(($x))

每个部分的解释:

  • 从文件 {FILENAME} 中提取 64 位整数值的八个字节作为两个四字节 block 打印为十六进制编码值。

    hexdump -n 8 -e '2/4 "%08X " "\n"' {FILENAME}
  • 反转两个 block 的字节顺序并将其打印为表示二进制值的单个八字节 block 。为后续处理添加 0x

    awk 'BEGIN{printf "0x"}{print $2$1}
  • 将十六进制表示保存到 x 中,供 bash 计算。

    x=`....`
  • 让 bourne shell 解释并输出 64 位整数变量的十六进制编码值(这里需要前面加上的 0x)。

    echo $(($x))

关于c++ - 使用 hexdump 输出 64 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31081298/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com