2017-04-17 44 views
-3

例如:如何識別給定的十六進制字符串的字節順序?

十六進制字符串是: - 70 6F 77 65 72 73 68 65 6C 6C

爲上面的字符串的ASCII是:的powershell

我想知道如何識別上面的字符串是小端還是大端。

假設如果我改變字節以其他端6F 70 65 77 73 72 65 68 6C 6C 則ASCII是「opwesrehll」

如果我正在改變字節順序,那麼值正在改變。我認爲轉換出了問題。

如何轉換爲其他endian格式不改變主值「powershell」

在此先感謝

+0

字節順序通常不是一個應用於(ASCII)字符串的概念,因爲每個字符只有一個字節,並且整個字符串在內存中以相反的順序存儲會很奇怪。 –

+5

字節沒有字節序。 –

+0

此外,您可以檢測系統的字節序,但不能檢測數據。數據的排列順序是作者所使用的;問。所以,我問你:當你寫70時,你的意思是這個值是7 * 16 + 0 * 1?高蠶食先? –

回答

0

「字節沒有字節順序。」 - @MichaelPetch

是正確的,因爲您的ASCII碼是每個字母一個字節。所以,只需一次讀取每個字節的一個字母即可建立您的單詞。

「假設如果我改變字節順序到其他端6f 70 65 77 73 72 65 68 6c 6c
那麼ASCII碼是‘opwesrehll’。

也就是說如果你翻車了2個字節的時有發生,但是這是ASCII(字母字符)...
對於每個字母,您應該讀取一個字節,並且不涉及翻轉/字節順序。翻轉僅計數數字值存儲在Short(2字節),甚至每Long/DoubleInteger/Float(4個字節)(8個字節)等

「我想知道如何辨別上面的字符串是小端或大端。 「

側面說明:UTF-16(非ASCII)有時可以使用字母字符超過1個字節(尤其是與外國字母像日語俄語阿拉伯語等)。對於這種情況,文本將以一個稱爲BOM(字節順序標記)的兩字節標誌開始,表示字節是什麼字節。請檢查bytes[0],如果此第一個字節[0]給出值255(0xFF),然後再檢查bytes[1]如果下一個字節給出254(0xFE),則您的UTF文本是小尾數。對於大端,你期望0xFE,然後是0xFF。因爲你的支票一次一個字節 ...

+0

BOM與UTF-8沒有此用途。它只是作爲溝通編碼的一種方式。 (有些人認爲是這樣;一些人反對。)代碼點的UTF-8字節(代碼單元)仍然是特定的字節序列。單詞的字典是不相關的。 –

相關問題