簡體   English   中英

stringstream >> uint8_t十六進制? C ++

[英]stringstream >> uint8_t in hex? c++

我對以下代碼的輸出感到困惑:

uint8_t x = 0, y = 0x4a;
std::stringstream ss;
std::string a = "4a";


ss << std::hex << a;
ss >> x;

std::cout << (int)x << " "<< (int)y << std::endl;
std::cout << x << " "<< y <<std::endl;
std::cout << std::hex << (int)x <<  " " << (int)y << std::endl;

uint8_t z(x);
std::cout << z;

上面的輸出是:

52 74

4 J

34 4a

4

當我們改變時將第一行替換為:

uint16_t x = 0, y = 0x4a;

輸出變成:

74 74

74 74

4a 4a

Ĵ

我想我明白會發生什么,但我不明白為什么會發生,或者我怎么能阻止它/解決它。 根據我的理解, std::hex修飾符因為x的類型而在某種程度上被破壞,在技術層面可能不完全正確,但它只是寫入它讀取的第一個字符。

背景:輸入應該是一串十六進制數字,每對代表一個字節(就像一個位圖,除了字符串)。 我希望能夠讀取每個字節並將其存儲在uint8_t所以當我遇到這個問題時我正在試驗它。 我仍然無法確定什么是最好的方法,所以如果你認為我正在做的是低效或不必要的我會很高興知道為什么。 謝謝你的閱讀,

ss >> x

將uint8_t x視為unsigned char。 '4'的ascii值是(十進制)52。它將字符串“4a”的第一個字符讀取到x中,好像x是一個字符。 當你將它切換到uint16_t時,它將它視為無符號短整數類型。 與y相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM