【问题标题】:What's a Hex Dump - What does it mean?什么是十六进制转储 - 这是什么意思?
【发布时间】:2011-04-06 19:48:18
【问题描述】:
thegladiator:~/cp$ cat new.txt
Hello World This is a Trest Progyy

thegladiator:~/cp$ hexdump new.txt
0000000 6548 6c6c 206f 6f57 6c72 2064 6854 7369
0000010 6920 2073 2061 7254 7365 2074 7250 676f
0000020 7979 000a                              
0000023

这些文本数据是如何以十六进制表示的?这是什么意思?

【问题讨论】:

  • 这没有帮助? en.wikipedia.org/wiki/Hex_dump
  • 什么操作系统? (这可能有助于为什么交换字节)
  • @S. Lott:这听起来非常接近 LMGTFY 的答案。 meta.stackexchange.com/questions/15650/…
  • Ubuntu / Linux 。 Wiki 并没有帮助我尽可能多地掌握这些概念。为什么 H 是 48 ? ASCII ?
  • @Nishant:是的,48 是 H 的 ASCII。但是由于某种原因,正如 KevinDTimm 指出的那样,您的字节被交换了。不知道为什么会这样。

标签: hexdump


【解决方案1】:

正如它所说,以十六进制格式转储数据:

H 48 
e 65
l 6c
l 6c
o 6f

奇怪的是所有字节都被交换了 (65 48 : e H)

如果你在*nix系统上,你可以使用'od -x',或者'man od'会告诉你从od获取数据的所有方法:)

【讨论】:

  • 似乎所有字节都被交换了,而不仅仅是其中的一些。
  • 这似乎是 ASCII 编码文本,由于某种原因交换了字节。见asciitable.com
  • @John:Little-endian 与数字编码有关,而不是字符串编码。 en.wikipedia.org/wiki/Endianness
  • 是否有等效的二进制转储?
  • @Eric 如果这是 linux hexdump,那么默认输出格式(OP 使用的)相当于-x,它将数据显示为 16 位整数。因此字节顺序是一个问题。 OP 应该尝试使用-c 选项来查看切换是否消失。
【解决方案2】:

文件new.txt 中的文本使用ASCII 编码存储。每个字母由一个数字表示,十进制:32-127 十六进制:20-7F。所以前三个字母 (H,e,l) 用十进制数字表示:72,101,108 和十六进制数字:48,65,6C

Hexdump 默认采用输入文件new.txt 的每个 16 位字并将该字输出为十六进制数。因为它是在 16 位而不是 8 位上运行的,所以您会以意想不到的顺序看到输出。

如果您改为使用xxd new.txt,您将看到按预期顺序输出的输出。

【讨论】:

  • 成对? 8bits 应该用 Hex pair 来表示。
  • 8 位由两个十六进制数字表示。所以 48 中的 4 是 4 位,8 是其他 4 位
  • hd(它是 hexdump 的符号链接,并导致 -C 开关成为默认值)也会产生预期的输出。
猜你喜欢
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 2018-09-08
  • 2020-06-18
  • 2013-06-17
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多