【问题标题】:Is there need to convert byte order for strings?是否需要转换字符串的字节顺序?
【发布时间】:2013-04-08 11:14:14
【问题描述】:

发送和接收字符串时是否需要转换为网络/主机字节顺序。可用的函数(例如 htons())仅适用于 16 位和 32 位整数。我也知道一个 char 不应该有所作为的事实,一般来说,它是一个字节大。但是字符串呢?

下面是代码sn-p

 int len; recv(fd, &len, sizeof (int), 0); 
 len = ntohl(len);

 char* string = malloc(sizeof (char) * (len + 1)); 
 int received = recv(fd, string, sizeof (char) * len, 0); 
 string[len] = '\0';

【问题讨论】:

  • 纯ascii字符串还是unicode?​​span>

标签: c endianness


【解决方案1】:

这取决于字符串的编码。

如果是面向字节的格式(普通的旧 ASCII 或 UTF-8),那就没关系了。

如果它使用大于单个字节的“代码点”,那么它很重要。

【讨论】:

    【解决方案2】:

    C 字符串只是一个单字节值的数组,约定用一字节特殊值来终止它们,因此没有什么可以交换的。 Shorts 和 int 是多个字节值,它们根据硬件要求以不同方式存储,因此需要规范它们在网络中的存储顺序(以防接收器具有不同的硬件架构)。

    【讨论】:

      猜你喜欢
      • 2010-09-30
      • 2010-10-21
      • 2010-11-04
      • 2015-09-04
      • 1970-01-01
      • 2022-01-22
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多