【问题标题】:byte order conversion for signed integer有符号整数的字节顺序转换
【发布时间】:2013-08-19 01:11:36
【问题描述】:

我在主机(取决于 CPU)和网络(大端)之间转换字节顺序时遇到问题。这些是我发现的所有 API(在 Linux 的“arpa/inet.h”中)可以解决我的问题。

 uint32_t htonl(uint32_t hostlong);

 uint16_t htons(uint16_t hostshort);

 uint32_t ntohl(uint32_t netlong);

 uint16_t ntohs(uint16_t netshort);

除了一件事,它们只处理无符号整数(2字节或4字节)。

那么有没有办法处理有符号整数大小写?也就是说,如何实现以下函数(API)?

 int32_t htonl(int32_t hostlong);

 int16_t htons(int16_t hostshort);

 int32_t ntohl(int32_t netlong);

 int16_t ntohs(int16_t netshort);

【问题讨论】:

标签: c endianness


【解决方案1】:

从技术上讲,变量内部的值是什么并不重要,因为您只是想借用功能。将有符号分配给无符号时,其值会发生变化,但位相同。所以将其转换回签名是可以的。

编辑:正如 amrit 所说,它是 Signed Integer Network and Host Conversion 的副本。

【讨论】:

  • 谢谢。你的回答比重复的人提供了更多的帮助。
猜你喜欢
  • 2012-10-30
  • 2023-04-01
  • 2023-01-29
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
相关资源
最近更新 更多