首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >u8、uint8_t、__u8和__be8的差异

u8、uint8_t、__u8和__be8的差异
EN

Stack Overflow用户
提问于 2014-11-12 03:58:25
回答 3查看 10.7K关注 0票数 8

在浏览linux网络代码时,我遇到了以下数据类型:

  1. u8
  2. uint8_t
  3. __u8
  4. __be8

( 16、32和64位的情况相同)

请有人解释一下这些数据类型之间的区别,以及在哪里使用哪种数据类型?我已经看到了这些数据类型的定义,但对我来说还不清楚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-12 04:06:31

uint8_t是标准C,表示无符号8位整型.如果您所处的系统没有8位可寻址单元,那么这将不会被定义;否则它可能是用于typedefunsigned char

其中包含__的任何内容都保留给实现使用。这意味着编译器编写人员和标准库编写人员可以使用这些标识符,而不必担心名称与用户代码的冲突。在查看标准库实现的内部部分时,您可能会看到这一点。

u8是非标准的,但几乎可以肯定的是,它的含义与uint8_t相同。使用u8的一个原因是在将uint8_t添加到标准C之前编写的代码。

票数 12
EN

Stack Overflow用户

发布于 2014-11-12 04:06:40

最后一个表示大端(对于单个字节来说没有意义),也就是网络字节顺序。

其他的都是完全相同的,一个8位/1字节的无符号类型。

对于那些具有16位/2字节resp的类型,上述所有内容都是正确的。32位/4字节。

(例如,x86上的主机字节顺序是小字节,而Linux只在8位字节机器上运行。)

在列表中,只有uint8_t是由C标准(在<stdint.h中)定义的,最后两个是在实现名称空间中,这通常是个坏主意。

票数 1
EN

Stack Overflow用户

发布于 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]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26879008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档