例如:
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格式?
提前致谢
答案 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一切正常,因为您一次检查一个字节 ......