【发布时间】:2014-03-24 23:03:59
【问题描述】:
我想要将整数转换为字节数组(小端序)的方法, 以及从字节数组(以小端方式编码)到 C 中的整数; 无论我们是在 LE 还是 BE 机器上工作。
这些功能适合吗?
void Int2ByteArrayLE(int x,unsigned char *byteArray)
{
byteArray[0]=x;
byteArray[1]=x>>8;
byteArray[2]=x>>16;
byteArray[3]=x>>24;
}
void ByteArrayLE2Int(unsigned char *byteArray, int*x)
{
*x=byteArray[0] | (byteArray[1]<<8) | (byteArray[2]<<16) | (byteArray[3]<<24);
}
附言。如果 x 已签名,这是否也有效?
【问题讨论】:
-
@harold:据我所知,当您将整数转换为 unsigned char 时,最重要的位会被丢弃(当 int 大于 unsigned char 时)-这是您的意思吗?
-
你能解释一下你为什么这样做吗?我怀疑有更好的解决方案。
-
@DavidHeffernan:我认为这很常见,不是吗?特别是如果您想通过网络发送整数,而服务器需要小端格式的整数,例如
-
所以在这种情况下你做错了!不要试图从小端转换为大端。从主机字节顺序转换为网络字节顺序。使用套接字库中众所周知的函数。
-
@DavidHeffernan 我相信他在考虑负面价值观。
标签: c bit-manipulation