2013-06-12 169 views
1

我正在實現C代碼來將16位符號和幅度整數複製到8位符號和幅度整數。這甚至有可能嗎?有人可以解釋如何做到這一點?將16位整數轉換爲8位整數?

代碼片段:

int16_t a = 0x1234; 
int8_t b, c; 

如何前兩位複製到變量b和接下來的兩個數字到變量c?

回答

3

您可以使用該語言的按位運算符:您需要將數字8和0位分別向右移動以獲取第一個和第二個數字(您還應該使用255來掩蓋它們,以便恰好一個字節被提取):

int16_t i = 0x1234; 
uint16_t n = i; // because shifting the sign bit invokes UB 
int8_t hi = ((i >> 8) & 0xff); 
int8_t lo = ((i >> 0) & 0xff); 
+0

這將適合在那裏的所有位,但我不會完全調用兩個部分「符號和量級整數」。特別是下半部分只能被認爲是無符號的。 – Thilo

+0

@Thilo你有什麼建議呢? (我意識到這可能沒有意義,但那是因爲這個問題也不是很有意義。) – 2013-06-12 05:10:11

+0

並不意味着批評你的答案。只是對這個問題發表評論。沒有其他方式將16位合併到2x8中。沒有額外符號位的空間。 – Thilo