考慮以下數據:我如何結合並在一個整型變量中存儲2個char變量?
char a=12,b=30;
int c=0;
我想變量c以存儲該組合值爲c = 1230。 即int數據類型有2個字節,第一個字節應該保持a的值,第二個字節應該保持b的值。 PS:一個使用操作符的soln將會很棒,任何其他的建議也是受歡迎的。
考慮以下數據:我如何結合並在一個整型變量中存儲2個char變量?
char a=12,b=30;
int c=0;
我想變量c以存儲該組合值爲c = 1230。 即int數據類型有2個字節,第一個字節應該保持a的值,第二個字節應該保持b的值。 PS:一個使用操作符的soln將會很棒,任何其他的建議也是受歡迎的。
1230 = 12 * 100 + 30.所以看來你可以指定a*100+b
到c
。
但是,如果a
或b
不在0..99(含)範圍內,那可能無法按照您的方式工作。
您可以使用按位操作作爲替代。一個char是保證1個字節,這樣你就可以通過移動一個字符,然後使用操作或將它們結合起來存放:
int combine(char c1, char c2) {
return c1 | c2 << 8;
}
然後你可以使用AND和右轉向再次分裂他們:
void split(int in, char *c1, char *c2) {
*c1 = in & 0xff;
*c2 = in >> 8;
}
然而,這將不會給你你想要的輸出,但它會在一個int中存儲兩個字符。
你也可以使用一個聯盟這樣
typedef union {
char bytes[2];
int integer;
} combined;
,然後存儲像
char a = 12;
char b = 30;
combined c;
c.bytes[0] = a;
c.bytes[1] = b;
和c.integer的字符現在同時存儲字符的。但請注意,由於int
通常是32位寬,所以16位將是「隨機的」,因此您無法比較以這種方式創建的兩個int
。更好的選擇是short
。
正如在其他答案中,這不會給你你想要的輸出,但只是一個方法來存儲兩個字符在一個int。
哦。 C++中毒了我的C.感謝您指出。 – N1ckles
s/0b11111111/0xff /? –
@BjornA。這看起來更加整潔。我應該看看十六進制,哈哈。謝謝! – N1ckles