簡體   English   中英

在C中將uint16_t拆分為位

[英]Split uint16_t in bits in C

您好,我有一個uint16_t數字,我需要將其分為3部分。

這個數字的前5位給了我小時。

接下來的6位數字給了我分鍾。

此數字的后5位給我幾秒鍾。

因此,我需要將其分為三個部分,以獲取所需的信息。

任何想法 ?

除了不能將8位拆分為16位(我要假設您實際上有一個uint16_t,因為在這里這很有意義)之外,您想要的稱為掩碼。 假設您的16位值存儲在變量“值”中

要獲得第一個(最高有效)5位,請使用掩碼0xF800,二進制格式為1111100000000000。

您使用按位AND來執行此操作:

    const uint16_t MASK;
    uint16_t value = whatever_was_passed_in;
    value = value & MASK;

這會將您不感興趣的位清零。如果您希望將那些位向下移到變量的最低部分,可以通過向右移動來做到這一點:

    value = (value & MASK) >> 11;

其他塊的處理過程相同,但掩碼和移位值不同。

typedef struct bit_time {
   unsigned int hour:5;
   unsigned int minute:6;
   unsigned int seconds:5;
} bit_time_t;

這是一個很好的解釋。

暫無
暫無

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

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