再探 Uint8Array.fromHex()
前言
在先前的 初探 Uint8Array.fromHex() 與 Uint8Array.toHex() 使用 Uint8Array.fromHex() 來編碼成 Hex ,Uint8Array.fromHex() 是如何編碼儲存的呢?在此把學習的過程做個紀錄。
內容
在開始前先說明一下 初探 Uint8Array.fromHex() 與 Uint8Array.toHex() 會容易讓人以為可以將任何字串做編碼,但事實上只有符合 16 進制的字元( 0 ~ 9 與 a~f ) 可以被編碼,如果該字串含有非 16 進制的字元( 0 ~ 9 與 a~f ) 將會報錯。範例如下
let str = '0123456789abcdef'; let arHex = Uint8Array.fromHex( str); console.log( arHex.toString() );//1,35,69,103,137,171,205,239 arHex.forEach( (val) => console.log( "0x"+val.toString(16).padStart(2,'0') ) ); // "0x01" // "0x23" // "0x45" // "0x67" // "0x89" // "0xab" // "0xcd" // "0xef"
透過 Uint8Array.toString() 可以看到儲存的時候只有 8 個,但輸入的字串有 16 個,所以猜測是以每兩個 Byte 編碼成一個 Uint8 ,結果呢?沒錯,透過範例最後的 forEach() 可以看到每個 Uint8 編碼是來自兩個 Byte ,第一個 ox01 是來自原始字串的 o1 ,注意高位元是 0 ,低位元是 1 ,所以編碼成 0x01 ,而非0x10 。
參考資料
[ developer.mozilla.org ] Uint8Array.fromHex()
沒有留言:
張貼留言