gpt4 book ai didi

c - uint8_t 和 unsigned char 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:38 24 4
gpt4 key购买 nike

我正在使用 mplabX 4.20 和 xc8 编译器。我试图了解 uint8_t 和 unsigned char 之间的区别。它们的大小都是从 0 到 255。两者都可以容纳字符和数字。但哪个更好用,适用于哪种情况?

示例,如果我想创建一个用于保存字符串的缓冲区。

uint8_t buffer[20]="Hello World";
unsigned char buffer[20]="Hello World";

在大多数情况下,我需要保存字符。执行此操作的最佳做​​法是什么?

最佳答案

I'm using mplabX 4.20, and xc8 compiler. I'm trying to understand which is the difference between uint8_t and unsigned char. Both of them have size from 0 till 255. Both of can hold characters and numbers. But which is better to use, and for which case?

unsigned charsigned char对应的无符号整数类型。它的表示不使用任何填充位。这两者都占用与 char 类型相同的存储量,至少 8 位,但可能更多。宏 CHAR_BIT 告诉您它在您的实现中包含了多少。每个符合标准的 C 实现都提供所有这些类型。

uint8_t(如果可用)是一种无符号整数数据类型,恰好 8 位宽且没有填充位。在将 CHAR_BIT 定义为 8 的实现中,这与 unsigned char 的类型相同。在此类系统上,只要 stdint.h 提供的声明在范围内,您就可以互换使用这两种类型。在其他系统上,uint8_t 根本不会被声明。

Example if i want to create a buffer for holding a string.

如果你想声明一个缓冲区来保存一个字符串,那么作为一种风格,你应该使用 char 类型,而不是其他两种:

char buffer[20] = "Hello World";

虽然另外两个,或者signed char,也可以用于字符串数据(前提是在uint8_t的情况下完全定义了类型) , char 类型是用于字符数据的常规类型。例如,证明所有 string.h 函数都是根据该类型声明的。

您应该在且仅在您需要具有其属性的整数类型时使用 uint8_t:无符号、8 个值位、无填充位。

您应该在需要可用的最小无符号整数类型的地方使用unsigned char,但您不关心它是否恰好是 8 位宽,或者您想强调它是相同的大小为 char -- 可用的最小离散存储单元。

您应该在需要可用的最小有符号整数类型但不关心确切大小或表示形式的地方使用 signed char

您应该使用 int8_t,如果您想要一个有符号整数类型,正好有 7 个值位,一个符号位,没有填充位,用二进制补码表示。

您应该注意 uint8_tint8_t 不能保证在每个 C 实现中都可用,并且在它们可用的情况下,它们的使用需要包含 stdint.h。此外,此 header 和这些类型根本不是 C90 的一部分,因此如果与旧 C 实现的兼容性对您很重要,则不应使用它们。

关于c - uint8_t 和 unsigned char 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53282274/

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