2012-09-18 35 views
0

我有一個2字節長的十六進制字符串,需要將第一個字節按位移到左邊,然後向它添加第二個字節。兩個字符串都來自32個字符的字符串。字符串來自我正在解析的數據文件。你如何在PHP中按位移動數據類型字符串的十六進制字符串?

$hex="05E000752F0100D0A500503891FB199A"; //example line of data from file 

$vcanvbatt=(base_convert(((base_convert(substr($hex,12,2),16,2)<<8)+base_convert(substr($hex,14,2),16,2)),2,10))/100; 
+1

'$ byte1 = hexdec(substr(...)); $ byte2 = hexdec(substr(...)); $ result =($ byte1 << 8)+ $ byte2;'? – DCoder

+0

@DCoder你應該發佈,作爲答案 –

回答

3

根本不需要轉換爲二進制,只需移動十進制數就可以了。如果我理解數學,你需要正確的,這應該工作:

$byte1 = hexdec(substr($hex, 12, 2)); 
$byte2 = hexdec(substr($hex, 14, 2)); 
$result = ($byte1 << 8) + $byte2; 
+0

8位移不會在這個工作,因爲整數isnt 8位在PHP中,你知道它有多長? – Graham

+0

我不知道我明白你在問什麼。 php中的整數最有可能是32位或64位,具體取決於php版本,但這是無關緊要的 - 移位一個字節與「<< 8」相同,並且由於輸入只是一個字節,它不會溢出。如果你發佈了一些你想要計算的更多細節,這可能會有所幫助。 – DCoder

+0

謝謝,我解決了這個問題,這非常有幫助 – Graham

相關問題