2012-10-16 191 views
2

任何方式將短的2字節短(正常短)轉換爲2字節字符串(char *)後使用htons。事情是htons方法返回一個int(4字節),我怎麼把它放入一個2字節的字符串?C中2個字節的字節縮短爲2個字節?

注意:我需要能夠使用結果中的ntohs來獲取原始值。

謝謝建議:d

+0

你想轉換一個'short'或者'int'嗎?現在'int'大多是4個字節。 – JohnB

+0

我想htons只是返回另一個短,所以真正的問題只是將一個短轉換成一個2字節的字符串 –

回答

3

AHM,你說怎麼辦htons返回一個4字節整數,在我的Linux,htons有

uint16_t htons(uint16_t hostshort); 

原型因此,你可以做

uint16_t value; 
value = htons(hostshort); 
char *bytes = &value; 
// now the first 2 bytes pointed to by "bytes" are the value in network byte order 

這意味着返回值只是2個字節。

然後,我認爲這是保證後htons這樣的位表示返回值是這樣的值的第一個字節(((無符號字符*)值)[0])是最重要的,第二最不重要的。

+0

我的不好之處在於它對我來說是一樣的,但現在的問題是如何將它轉換成只有2字節的字符串。該htons返回2000例如,如何將其存儲到一個2字節的字符串?? :( –

2
short i; 
// ... 
char s [3]; 
s [0] = (i >> 8) & 0xFF; 
s [1] = i & 0xFF; 
s [2] = '\0'; 
+0

你可以請你準確解釋你在s [0]中放置了什麼,0xFF是NULL嗎? :( –

+0

(i >> 8)將i的前8位移位8,因此移到最下8位,&0xFF屏蔽前8位i&0xFF將i的最低8位存儲在s [ 1]。然後s [2] – DaV

+0

爲null,我首先將'i'轉換爲'unsigned(short)',以避免實施定義的行爲>> >>對負整數。 –