在C中,2字节短为2字节字符串?

在C中,2字节短为2字节字符串?,c,string,byte,short,htonl,C,String,Byte,Short,Htonl,在对2字节短字符(普通短字符)使用htons后,将其转换为2字节字符串(char*)的任何方法。问题是htons方法返回一个int(4字节),我如何将它转换成一个2字节的字符串 注意:我需要能够对结果使用ntohs来获得原始值 谢谢你的建议:D啊,你怎么说htons返回一个4字节的整数,在我的linux上,htons的原型是 short i; // ... char s [3]; s [0] = (i >> 8) & 0xFF; s [1] = i & 0xFF; s

在对2字节短字符(普通短字符)使用htons后,将其转换为2字节字符串(char*)的任何方法。问题是htons方法返回一个int(4字节),我如何将它转换成一个2字节的字符串

注意:我需要能够对结果使用ntohs来获得原始值


谢谢你的建议:D

啊,你怎么说htons返回一个4字节的整数,在我的linux上,htons的原型是

short i;
// ...
char s [3];
s [0] = (i >> 8) & 0xFF;
s [1] = i & 0xFF;
s [2] = '\0';
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之后,返回值上的这种位表示是这样的,即值的第一个字节(((unsigned char*)值)[0])是最高有效的,第二个是最低有效的。

您想转换
short
还是
int
int
现在大部分是4个字节。我认为htons只返回另一个short,所以真正的问题是将short转换为2个字节的string。请您确切解释一下您在s[0]中输入了什么,0xFF为NULL,对吗??:((i>>8)将i的前8位移8位,因此移到下8位,&0xFF屏蔽掉前8位。i&0xFF将i的下8位存储在s[1]中。然后,s[2]的null首先将
i
转换为
无符号(短)
避免在负整数上执行
>
的实现定义行为。是的,可能您是对的。但是,算术和二进制移位应该只在“新插入的”方面有所不同位,对于负数,算术右移是1,二进制是0。这不是标准化的吗?在这种情况下不重要;任何符号位都在0xFF掩码之外。我的缺点是,这对我来说是一样的,但现在的问题是,我如何将其转换为只有2个字节的字符串。我尝试使用sprintf,但设想htons return 2000例如,如何将其存储为2字节的字符串??:(