2011-02-17 67 views
2

我可能在這裏非常錯誤,所以請指出我可能有的任何誤解或錯誤。獲取一個整數給定其4字節無符號整數小尾數形式? (C++)

此賦值的輸入是一些字符的字符串,後面跟着一串小字節形式的4字節無符號整數。我將輸入讀入STL字符串,並使用子字符串函數將整數分隔爲新字符串。

據我所知,最低有效位將從最左邊的字節開始存儲。一個無符號整數131071(十進制)的二進制表示爲(0000 0000 0000 0001 1111 1111 1111 1111)將被存儲爲1111 1111 1111 1111 0000 0001 0000 0000

解析這個新字符串一次4個字節,第一個字節將包含值爲0-255的位,爲256-65535包含第二個字節,第三和第四個字節等等。

我拿了第一個字節,將它轉換爲一個無符號整數,然後將它移位了24位,我對第二和第三個字節做了相同的處理,除了16位和8位移位。

我得到255和65535的第一和第二個字節的預期,但0爲第三個字節。我相信我必須在某個地方使用&運算符,但我無法弄清楚在哪裏。如果任何人都可以給我一些建議,或者可能是一種不太愚蠢的方式來完成同樣的任務,我將不勝感激。

+1

我認爲我們需要看一些代碼來確定出了什麼問題 – jcoder 2011-02-17 09:32:53

回答

3

如果第3個字節的值爲0,並且數據與您的描述相匹配,則代碼中存在一個錯誤。以下代碼將正確地轉換您的示例數據。

// Data from file 
unsigned char Buffer[] = { 255, 255, 1, 0 }; 

// Convert the LSB data to an unsigned int 
unsigned int Result = 0; 
for (int i = 0; i < 4; ++i) { 
    Result |= static_cast<unsigned int>(Buffer[i]) << (i*8); 
} 
相關問題