2016-11-12 53 views

回答

2

1230 = 12 * 100 + 30.所以看來你可以指定a*100+bc

但是,如果ab不在0..99(含)範圍內,那可能無法按照您的方式工作。

3

您可以使用按位操作作爲替代。一個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中存儲兩個字符。

+0

哦。 C++中毒了我的C.感謝您指出。 – N1ckles

+2

s/0b11111111/0xff /? –

+0

@BjornA。這看起來更加整潔。我應該看看十六進制,哈哈。謝謝! – N1ckles

0

你也可以使用一個聯盟這樣

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。

相關問題