簡體   English   中英

C將unsigned char轉換為unsigned char:4

[英]C casting unsigned char to unsigned char : 4

我目前有一個關於警告的問題。 我有一個方法返回u8值,其中u8被定義為unsigned char

u8 foo (...)

在結構內部,我有一個成員x ,只需要4位。

struct {
     u8 x : 4;
     u8 y : 4;
} s;

現在,我想將foo的返回值分配給x 但是,我的編譯器發出了有關unsigned char轉換為unsigned char可能造成的損失的警告unsigned char : 4 然而,這樣的演員表卻未被認可。

struct_inst.x = (u8 : 4)foo(..);

正確的語法是什么?

:4一起使用時,位域類型在C的類型系統中不是正確的類型,因此您不能在強制轉換中使用它們。

您的編譯器警告有點過頭,從一種無符號類型到另一種無符號類型的轉換是定義明確的。 警告的含義是正確的,但是,將8位類型轉換為4位字段可能會丟失信息。 也許您可以通過將返回值與0xF相乘來使編譯器靜音,以便編譯器看到您願意將更高的位扔掉。

BTW:

  • <stdint.h>中存在類型uint8_t ,該類型具有所需的屬性。

  • 在大多數情況下,使用比int窄的類型不是一個好主意,因為無論如何它們總是在算術上提升為int 僅當您獲得的幾個字節確實值得時才使用它們。 如果您的系統中有千兆字節的內存,則不是這樣,例如

  • 位域甚至比窄整數類型有用。

暫無
暫無

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

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