2011-04-26 79 views
4

我有存儲在兩個字節數組十六進制值:字符數組轉換十六進制值的整數值

unsigned char hex[2] = {0x02, 0x00}; 

我怎樣才能將它轉換爲十進制值?

+1

這是其中的一個夜晚......隨意給我儘可能多的冒犯,因爲我應得的。我不確定爲什麼,但近距離決賽越多,我就會在「思考」中產生可怕的糟糕失誤。 出於某種原因,我認爲除此之外還有更多。我讓自己相信它要複雜得多...... – tgai 2011-04-26 00:23:04

+1

@Mitch小麥:別擔心。你的評論實際上讓我暫停了一秒鐘,並意識到我確實知道我的問題的答案。當我接近開始我的合作社時,我發現自己非常害怕犯這樣的錯誤,而且看起來很愚蠢。提醒大家,犯錯誤和/或不記住頭頂的事情註定要發生,而不是世界末日。 – tgai 2011-04-26 00:35:29

回答

6

可以使用(位運算)

int b = (hex[0] << 8) | hex[1];

或(簡單的數學)

int b = (hex[0] * 0x100) + hex[1];

0

取決於endian-ness,但類似的東西?

short value = (hex[0] << 16) & hex[1]; 
+0

這對'<< 16'和'&'都是不正確的。 – MByD 2011-04-26 00:23:01

+0

「*取決於你擁有哪種印第安人」*部分是真實的。 – 2011-04-26 00:37:00

+0

爲什麼這是不正確的一些原因:首先你要將第一個字符移位16位而不是8位。 char通常是8位。其次,你要將兩部分聯繫起來,你需要或者他們。通過將十六進制[0]移位,您將前16位保留爲零,並且在使用十六進制[1]進行與運算時,您將有效地移除十六進制[1]。 (因爲zero anded總是爲零)感謝您的輸入! – tgai 2011-04-26 00:44:36

0

這是不是一種有效的方式,至少我不認爲它是,但它會在所有情況下工作,無論數組的大小,並將輕鬆地轉換爲b。

__int8 p[] = {1, 1, 1, 1, 1}; //Let's say this was the array used. 
int value = sizeof(p); //Just something to store the length. 
memcpy(&value, &p, value > 4 ? 4 : value); //It's okay to go over 4, but might as well limit it. 

在上面的例子中,變量「value」的值爲16,843,009。這相當於如果你已經完成了下面的內容。

int value = p[0] | p[1] << 0x8 | p[2] << 0x10 | p[3] << 0x18; 
相關問題