鍍金池/ 問答/HTML5  PHP/ strpos處理二進制流的問題

strpos處理二進制流的問題

$buff = pack('nn',0xabcd,0x01);
$pos =  strpos($buff,0x01);
echo $pos;

返回結果是3,0xabcd是兩個字節(jié),那么0x01的位置按照0,1,2順序,不應該是2嗎?
回答
編輯回答
夕顏

pack參數(shù)n的意思是 16bit unsigned short, big endian(即網(wǎng)絡字節(jié)序)
所以pack出來的結果是4個字節(jié)(16 + 16 bit), ord看$buff[0],[1],[2],[3]的話分別是171, 205, 0 ,1
0x01按照ushort的話是0x0001
strpos的offset也應該是3

171 = 16 * 10 (a) + 11 (b)
205 = 16 * 12 (c) + 13 (d)

順便: 如果pack用S參數(shù)的話, unsigned short (always 16 bit, machine byte order), 咱們常用的X86 CPU都是little endian, 所以
$buff的結果就應該是 205, 171, 1, 0
這個時候offset就是2了

核心是字節(jié)序問題

2017年10月1日 02:40