我有一个char xyz [2]; 我在xyz [0]和xyz [1]中以网络字节顺序接收2个八位字节数.如何将其更改为主机顺序.我如何使用ntohs转换xyz.请帮忙.
您的意思是"如何将网络顺序中的数据流转换为主机顺序的数据流?" 在这种情况下,您可以使用ntohs()/ htons()functions.但是要小心你如何调用它们,因为你可能不得不考虑对齐问题.通用解决方案是手动交换(或每个)字节对.
另一方面,如果要反序列化按网络顺序发送给您的数据,并且您希望使用程序中数据中序列化的值,那么"主机订单"的概念就是红色鲱鱼.所有你需要知道您收到的数据是否是大端或little-endian顺序:
unsigned short int le_value = xyz[0] + (xyz[1] << 8); // little-endian
unsigned short int be_value = xyz[1] + (xyz[0] << 8); // big-endian
Run Code Online (Sandbox Code Playgroud)
这是平台无关编程的典型标志:您的程序内部应完全独立于实现细节,并且必须在程序边界(即(de)序列化)精确指定固定实现.
请注意,在一般情况下,你不能只是将现有的字节的缓冲区,并把它解释为不同的值来代替,因为这不是标准允许.也就是说,您只能将数据视为int已声明为int的数据.例如,以下是非法的:char * buf = get(); int a = *(int*)buf;.合法版本以目标类型开头:int a; get_data((char*)&a);
| 归档时间: |
|
| 查看次数: |
2060 次 |
| 最近记录: |