2015-04-23 37 views
3

我讀2個字節,它們一起建立一個unsigned short值,從0到65536。我希望將它們組合到單個值組合兩個無符號字節到一個整數值,所以這裏我做了什麼:使用左移位和按位或

int32_t temp; 
uint8_t buffer[2]; 

............. 
temp = (buffer[1] << 8) /* [MSByte]*/| (buffer[0]/* [LSByte]*/); 

printf (" %d" ,temp) ; 

我仍然在32767溢出。任何想法爲什麼?

+1

如何'Buffer'聲明? –

+0

不清楚你在問什麼,也不知道你在做什麼。 – Lundin

+0

@iharob我已經添加了緩衝的聲明你的答案 – Engine

回答

3

角色字節到變速前INT,即:

((int32_t)buffer[1] << 8) | buffer[0] 

P.S. 2個字節可以存儲無符號整數值,範圍爲[0,65535];您提到的65536的值超出範圍。


完整的測試程序 - 嘗試不同的字節值buffer

#include <stdio.h> 
#include <stdint.h> 

int main() 
{ 
//uint8_t buffer[2] = {255, 0 }; // prints 255 
//uint8_t buffer[2] = {255, 127}; // prints 32767 
    uint8_t buffer[2] = {255, 255}; // prints 65535 

    int32_t temp = ((int32_t)buffer[1] << 8) | buffer[0]; 

    printf("%d", temp); 
} 
+0

感謝,但我仍然有溢出 – Engine

+1

@Engine,編輯測試代碼加入到證明它的作品 –

+2

@Engine我看來,像在'了'%D' printf'導致問題,因爲'%d'是用於'int',但你的'int'似乎是'int16_t'。嘗試C99格式'printf(PRIi32,temp)'? http://en.cppreference.com/w/c/types/整數 – user3528438