任何方式將短的2字節短(正常短)轉換爲2字節字符串(char *)後使用htons。事情是htons方法返回一個int(4字節),我怎麼把它放入一個2字節的字符串?C中2個字節的字節縮短爲2個字節?
注意:我需要能夠使用結果中的ntohs來獲取原始值。
謝謝建議:d
任何方式將短的2字節短(正常短)轉換爲2字節字符串(char *)後使用htons。事情是htons方法返回一個int(4字節),我怎麼把它放入一個2字節的字符串?C中2個字節的字節縮短爲2個字節?
注意:我需要能夠使用結果中的ntohs來獲取原始值。
謝謝建議:d
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])是最重要的,第二最不重要的。
我的不好之處在於它對我來說是一樣的,但現在的問題是如何將它轉換成只有2字節的字符串。該htons返回2000例如,如何將其存儲到一個2字節的字符串?? :( –
short i;
// ...
char s [3];
s [0] = (i >> 8) & 0xFF;
s [1] = i & 0xFF;
s [2] = '\0';
你可以請你準確解釋你在s [0]中放置了什麼,0xFF是NULL嗎? :( –
(i >> 8)將i的前8位移位8,因此移到最下8位,&0xFF屏蔽前8位i&0xFF將i的最低8位存儲在s [ 1]。然後s [2] – DaV
爲null,我首先將'i'轉換爲'unsigned(short)',以避免實施定義的行爲>> >>對負整數。 –
你想轉換一個'short'或者'int'嗎?現在'int'大多是4個字節。 – JohnB
我想htons只是返回另一個短,所以真正的問題只是將一個短轉換成一個2字節的字符串 –