簡體   English   中英

將 32 位整數拆分為 4 個 8 位整數

[英]Split a 32 bit Integer into 4 8 bit Integers

我正在使用 Java 處理視頻數據,並希望在 32 位整數中存儲四個 8 位整數。 換句話說,我想將 R、G、B 和 A 值從 0 到 255 打包成一個 32 位整數。

我該怎么辦:

  1. 創建從 0 到 255 的 4 個整數值並將它們存儲在 32 位整數中?

  2. 從 32 位整數解包 4 個 8 位整數值?

謝謝!

包裝:

int rgba = (a << 24) | (b << 16) | (g << 8) | r;

<<是左移運算符; | 是按位或運算符。

開箱:

int r = rgba & 0xff;
int g = (rgba >> 8) & 0xff;
int b = (rgba >> 16) & 0xff;
int a = (rgba >> 24) & 0xff;

>>是(帶符號的 *)右移運算符; &是按位和運算符。

顯然,您可以按照您想要的任何順序打包/打開它們。


(*) 您可以在此處使用有符號或無符號 ( >>> ) 右移。 在這種情況下,它對結果沒有影響。

這很簡單。 使用Color類。

  1. 創建從 0 到 255 的 4 個整數值並將它們存儲在 32 位整數中?

使用Color(int, int, int, int)構造函數和getRGB方法。

  1. 從 32 位整數解包 4 個 8 位整數值?

使用Color(int)構造函數和方法getRedgetGreengetBluegetAlpha

鏈接: java.awt.Color類的文檔

您可以使用以下基於ByteBuffer實用程序:

    int transformToInt(byte[] array) {
        return ByteBuffer.wrap(array).order(ByteOrder.BIG_ENDIAN).getInt();
    }

    byte[] transformToBytes(int value) {
        return ByteBuffer.allocate(4).putInt(value).array();
    }

GitHub 上的完整代碼

暫無
暫無

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

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