如何识别给定十六进制字符串的字节顺序?

时间:2017-04-17 19:57:44

标签: x86 endianness

例如:

Hex字符串是: - 70 6f 77 65 72 73 68 65 6c 6c

上述字符串的ASCII为: powershell

我想知道如何识别上面的字符串是小端还是大端。

假设我将字节顺序更改为其他字节序 6f 70 65 77 73 72 65 68 6c 6c 那么ascii就是“opwesrehll”

如果我改变字节顺序,则值正在改变。我觉得转换中出了点问题。

如何在不改变主要值“powershell”的情况下转换为其他endian格式?

提前致谢

1 个答案:

答案 0 :(得分:0)

  

"字节不具有字节序。" - @MichaelPetch

是正确的,因为您的ASCII是每个字母一个字节。因此,只需一次读取一个字母的每个字节即可构建您的单词。

  

"假设我将字节顺序更改为其他字节序6f 70 65 77 73 72 65 68 6c 6c,则ascii为“opwesrehll”。

如果你一次翻转2个字节会发生这种情况,但这是ASCII(字母字符)...
你应该读每个字母一个字节并且不涉及翻转/字节序。翻转仅计入存储在Short(2字节)或Integer / Float(4字节)内的数值,即使每Long / {{ 1}}(8字节)等。

  

"我想知道如何识别上面的字符串是小端还是大端。"

旁注: UTF-16 (非ASCII)有时可以使用超过1个字节的字母字符(特别是日语俄语阿拉伯语等外国字母表)。对于这种情况,文本将以一个名为BOM(字节顺序标记)的双字节标志开头,以表示字节是什么字节序。检查Double,如果第一个字节bytes[0]给出255作为值(0xFF),然后检查[0]如果下一个字节给出254(0xFE),则您的UTF文本是小端。对于大端,你期望0xFE后跟0xFF。 Stil一切正常,因为您一次检查一个字节 ......