0
我有一種情況,我需要將十六進制字符串0x8aaaf200
轉換爲uint32_t
。我首先在本地機器上測試了它(Linux Debian盒)。使用strtol()給出錯誤輸出的十六進制字符串轉換
// str contains "0x8aaaf200"
uint32_t var = (uint32_t)strtol(str, NULL, 0);
printf("conversion: %x \n\n", var); // prints 8aaaf200
我然後跑它在不同的機器(基於Android),但讓我吃驚,輸出出來是7fffffff
。我認爲這可能與不同機器上的uint32_t
大小有關。
有沒有人有關於如何解決它的建議?我無法更改uin32_t
類型的用法,因爲它是其他人編寫的代碼的一部分。
在任何符合C99的編譯器中,uint32_t'總是32位。但是正確的格式說明符是['PRIx32'](http://stackoverflow.com/q/12936798/995714) –
嘗試在轉換後測試'errno'的值,它可能會提供一些線索。 –
@JoëlHechterrno說'Errno:數學結果不能代表' – Jake