2013-10-31 123 views
1

我想在MFC項目中從十六進制字符串轉換爲整數。 的代碼是這樣的:轉換4字節十六進制字符串爲整數

CString sMask = "0xFFFFFFE0"; 
char* pMaskBuffer = sMask.GetBuffer(sMask.GetLength());    
sMask.ReleaseBuffer(); 
char * p = NULL; 
long iMask = strtol(pMaskBuffer, &p, 16); 

代碼工作正常時sMask變量是small.But 4字節掩碼生成奇怪值。而不是4294967264,我得到2147483647.如何克服這一點。請幫助。

回答

4

這是因爲strtol將返回長期使用這種

unsigned long iMask = strtoul(pMaskBuffer, &p, 16); 
1

std::strtol reference page

如果轉換值脫離的相應返回類型的範圍時,發生錯誤的範圍(設定errnoERANGE)和LONG_MAXLONG_MIN,...被返回。

在你的情況LONG_MAX返回,如果你檢查errno我敢打賭,這將是ERANGE。原因是strtol簽署的值,如果你想要無符號值你應該使用std::strtoul


另外請注意,如果你在將來某個時候改變使用C++ 11功能std::stol,它會在這種情況下拋出一個異常std::out_of_range

相關問題