簡體   English   中英

uint8_t和unsigned char之間的區別

[英]Difference between uint8_t and unsigned char

我正在使用mplabX 4.20和xc8編譯器。 我試圖了解uint8_t和unsigned char之間的區別。 它們的大小都在0到255之間。它們都可以容納字符和數字。 但是哪種更好,在哪種情況下呢?

例如,如果我想創建一個緩沖區來保存一個字符串。

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

在大多數情況下,我需要保留字符。 最佳做法是哪種?

我正在使用mplabX 4.20和xc8編譯器。 我試圖了解uint8_t和unsigned char之間的區別。 它們的大小都在0到255之間。它們都可以容納字符和數字。 但是哪種更好,在哪種情況下呢?

unsigned char是與signed char對應的無符號整數類型。 它的表示不使用任何填充位。 它們都與char類型占用相同的存儲量, 至少為 8位,但可能更多。 CHAR_BIT告訴您實現中包含多少個宏。 每個符合標准的C實現都提供所有這些類型。

uint8_t (如果可用)是一個無符號整數數據類型,正好是8位寬且沒有填充位。 在將CHAR_BIT定義為8的實現中,此類型與unsigned char相同。 在這樣的系統上,無論stdint.h提供的聲明在什么范圍內,您都可以互換使用這兩種類型。 在其他系統上,將根本不聲明uint8_t

例如,如果我想創建一個緩沖區來保存一個字符串。

如果要聲明一個用於保存字符串的緩沖區,那么就樣式而言,應使用char類型,而不要使用其他兩個類型:

char buffer[20] = "Hello World";

盡管其他兩個signed char或帶signed char也可以用於字符串數據(在uint8_t情況下完全定義了類型的情況下提供),但char類型是用於字符數據的常規類型。 舉例來說,這就是聲明所有string.h函數的類型。

您應僅在需要整數類型及其確切屬性的地方使用uint8_t :無符號,8個值位,無填充位。

您應該在需要最小的無符號整數類型的地方使用unsigned char ,但不要在乎它是否正好是8位寬,或者在這里您要強調它與char大小相同-最小的離散單位可用的存儲空間。

您應該在需要最小的帶符號整數類型但不關心確切大小或表示形式的地方使用帶signed char

您應該使用int8_t ,以獲取帶正負號的整數類型,該正整數類型具有恰好7個值位,一個符號位和無填充位(以二進制補碼表示)。

您應謹記,不能保證每個C實現都可以使用uint8_tint8_t ,並且在可用的情況下,使用它們需要包含stdint.h 此外,此標頭和這些類型根本不是C90的一部分,因此,如果與舊版C實現的兼容性對您很重要,則不應使用它們。

uint8_t和unsigned char之間的區別

如果您使用的是異域系統,其中CHAR_BIT > 8 ,那么根本就不會定義uint8_t

否則(如果CHAR_BIT == 8 )在unsigned charuint8_t之間沒有區別。

我需要保持角色

然后使用普通char

以字符串操作的函數通常具有[ const ] char *參數,並且您將無法將unsigned char數組傳遞給它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM