gpt4 book ai didi

c - 为什么处理字节(例如 'recv' )的 Windows API 调用使用默认签名的 char*?

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:23 25 4
gpt4 key购买 nike

我是 c/c++ 的新手,我正在尝试遵循一些指导原则,建议尽可能使用 stdint.h 定义的类型(uint8_t 等,而不是 unsigned字符).

但是,当您调用需要 char* 缓冲区(例如 recv)的 API 时,您似乎必须使用 API 指定的任何类型.

我不明白的是,如果您正在读取字节,为什么不希望它是无符号的,所以您得到的值介于 0 和 255 之间,而不是 -128 和 127。

我不知道这是否是特定于实现的,但我只见过 char 默认为已签名。

您是否希望将这样的调用结果转换为 unsigned char*uint8_t* 以允许您解释更高的正值?

最佳答案

在 Windows 上,recv 是 Winsock API 的一部分,它起源于 4.2BSD 套接字 API 的克隆。 4.2BSD 早于 ANSI C 和 void 关键字,所以它使用 char * 因为它是当时最接近通用指针的东西。

后来void被发明后,BSD等Unix系统更新了recv的定义,现在都使用void *。此更改的动机很明确:char * 并不是真正的通用指针,将其用作指针会使您的代码更丑陋,并具有更多类型转换。 void * 版本的 recv 也是 POSIX 强制要求的,因此唯一没有它的操作系统供应商是最不关心 POSIX 合规性和代码美学的供应商。 .. 微软。

关于c - 为什么处理字节(例如 'recv' )的 Windows API 调用使用默认签名的 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36663932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com