在浏览linux网络代码时,我遇到了以下数据类型:
( 16、32和64位的情况相同)
请有人解释一下这些数据类型之间的区别,以及在哪里使用哪种数据类型?我已经看到了这些数据类型的定义,但对我来说还不清楚。
发布于 2014-11-12 04:06:31
uint8_t是标准C,表示无符号8位整型.如果您所处的系统没有8位可寻址单元,那么这将不会被定义;否则它可能是用于typedef的unsigned char。
其中包含__的任何内容都保留给实现使用。这意味着编译器编写人员和标准库编写人员可以使用这些标识符,而不必担心名称与用户代码的冲突。在查看标准库实现的内部部分时,您可能会看到这一点。
u8是非标准的,但几乎可以肯定的是,它的含义与uint8_t相同。使用u8的一个原因是在将uint8_t添加到标准C之前编写的代码。
发布于 2014-11-12 04:06:40
最后一个表示大端(对于单个字节来说没有意义),也就是网络字节顺序。
其他的都是完全相同的,一个8位/1字节的无符号类型。
对于那些具有16位/2字节resp的类型,上述所有内容都是正确的。32位/4字节。
(例如,x86上的主机字节顺序是小字节,而Linux只在8位字节机器上运行。)
在列表中,只有uint8_t是由C标准(在<stdint.h中)定义的,最后两个是在实现名称空间中,这通常是个坏主意。
发布于 2019-02-13 16:22:34
@Soumen
“对不起,我忘了提u_int8_t,这有什么用?”
uint8_t代表windows,u_int8_t代表linux。对于windows,当使用uint8_t时,必须使用头文件<stdint.h>。如果您要将代码从linux带到windows环境,那么最好将代码转换为uint8_t格式。来源:t-on-windows/][1]
https://stackoverflow.com/questions/26879008
复制相似问题