【发布时间】:2020-02-17 19:26:16
【问题描述】:
我在 Linux 上使用 recv() 和 unsigned char buffer,效果很好。
但 Windows 上的 recv() 需要 signed char,我不知道为什么。
我认为数据包只能是 ASCII 字符。
我应该使用类似(char)buffer的东西吗?
【问题讨论】:
我在 Linux 上使用 recv() 和 unsigned char buffer,效果很好。
但 Windows 上的 recv() 需要 signed char,我不知道为什么。
我认为数据包只能是 ASCII 字符。
我应该使用类似(char)buffer的东西吗?
【问题讨论】:
char、unsigned char 和 signed char 是不同的类型,但都是 8 位的。理论上,所有“缓冲区”都应该是unsigned char*。实际上,许多函数使用普通的char*,包括大多数 Win32 API。在所有这些情况下,它都是一个普通的 8 位数组。
简而言之,随意施放。
实际上需要char 而不是unsigned char 的情况应该很容易检测和处理。
根据@JJ 评论,您还拥有std::byte 用于没有字符特征的原始 8 位内容,类似于 Win32 中的 BYTE。
【讨论】: