簡體   English   中英

將unsigned char轉換為int和short

[英]Converting unsigned char to int and short

我是新手,所以我首先要說的是,當我查看一些代碼時,我意識到這個功能對我來說沒有任何意義。

如您所見,此特定函數使用按位運算符將4個unsigned char元素轉換為整數。

//使用little-endian形式將四字符數組轉換為整數

int toInt(const char* bytes) {
    return (int)(((unsigned char)bytes[3] << 24) |
                 ((unsigned char)bytes[2] << 16) |
                 ((unsigned char)bytes[1] << 8) |
                 (unsigned char)bytes[0]);
}

short toShort(const char* bytes) {
    return (short)(((unsigned char)bytes[1] << 8) |
                   (unsigned char)bytes[0]);
}

我已經知道按位運算符和char如何使用1個字節,int使用4個字節。 為什么將char位向左移動24位而不是將其顯式轉換為int將其轉換為int? 為什么這個函數需要按位運算符?

這個功能超出了我的理解范圍,請解釋這段代碼以及它是如何工作的,或者至少給我一個能夠徹底解釋這個問題的鏈接。

我到處尋找解釋但找不到它。

這可能有一個簡單的解釋。

為什么這個函數需要按位運算符?

按位運算符用於從四個單字節數“組合”四字節數。

假設您有四個8位數字,如下所示:

aaaaaaaa
bbbbbbbb
cccccccc
dddddddd

轉移給你這個:

aaaaaaaa000000000000000000000000
00000000bbbbbbbb0000000000000000
0000000000000000cccccccc00000000
000000000000000000000000dddddddd

按位運算符OR允許您從這四個部分中生成一個數字,因為將任何位x與零進行OR會產生x 如果對齊如上所示的四字節數字,則每個位置只有一個非零位,因此按位OR產生所需的結果:

aaaaaaaabbbbbbbbccccccccdddddddd

暫無
暫無

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

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