2012-10-16 147 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)',以避免实施定义的行为>> >>对负整数。 –