2017-05-22 47 views
0

您好所有我的工作不是項目,我要加我的十六進制數據串2位消息ID和我不知道該怎麼做你的幫助將不勝感激添加到位之後一些十六進制值

char *fn = "\x60\x45\xd3\x94\x48\0x7c\0x19\xde\xea\x9a\x3e\x0e\xda\xc4\x9b\x81\x28\xb1\x0b\xff\</sensors>;ct=40;title=Sensor Index,</sensors/temp>;rt=temperature-c;if=sensor,</sensors/light>;rt=light-lux;if=sensor"; 

我需要添加2位消息ID後

+1

C,C#和大多數其他語言無法以小於字節的精度(結構中的小位域除外)存儲和檢索變量。所以,向變量添加「2位」是沒有意義的。你可以添加一個包含這2位的字節。 –

+0

@LeeDanielCrocker然而,你是對的,它不是語言的限制,而是底層架構的限制。 – sturcotte06

+0

我可以創建一種編程語言,允許任何比特長度的變量,存儲,檢索和打印它們,而不管架構如何。當然,架構會決定它們的存儲方式(就像它決定存儲浮動數據一樣)。 –

回答

1

兩個定製芯片之間,你也許能夠發送數據的2位,但在現代計算機,它必須在8位對齊。因此,即使你需要發送2位數據,你也需要用6位來填充整個字節。這轉換爲添加一個字符到你的fn字符串。

char *fn = "\x60\x45\xd3\x94\x48\0x7c\0x19\xde\xea\x9a\x3e\x0e\xda\xc4\x9b\x81\x28\xb1\x0b\xff\</sensors>;ct=40;title=Sensor Index,</sensors/temp>;rt=temperature-c;if=sensor,</sensors/light>;rt=light-lux;if=sensor"; 

int msgid = 0b11; 
int fnlen = strlen(fn); 
char fn2[fnlen + 2]; 

strcat(fn2, fn); 
fn2[fnlen] = (char) msgid; 
fn2[fnlen + 1] = '\0';