1

16進数はRGBAカラーモデルデータなどを表すためによく使用されるため、0x11AA22BBのような大きな16進数文字列を取得して、個別のバイトに分割する方法を見つけようとしています。(つまり、0x11、0xAA、0x22、および0xBBチャンク、基本的に..)。各16進数は4ビットで直接表すことができることを私は知っています。しかし、ビットのチェーンを小さなグループに分割することも、私が行う方法を知っていることではありません。

ですから、これにはおそらく簡単な答えがあると思います。おそらく、それを1バイトの配列にキャストしたり、ビット演算子などを使用したりすることと関係があると思いますが、理解できません。エンディアンとバイトの編成方法(RGBA、ARBG、ABGRなど)の問題もあることは知っていますが、今は分割の方法を理解しているので、一般的な理解を得ることができます。使い方。私はC++を使用していますが、これは必ずしもその言語に固有のものではないと思います。

繰り返しになりますが、0x11AA22BBのような大きな16進文字列を取得し、それを0x11、0xAA、0x22、0xBBに分割するにはどうすればよいですか?

4

3 に答える 3

4

mod/div と shift/mask の 2 つの方法がありますが、実際にはどちらも同じ方法です。

mod/div:

num = 0x11aa22bb
while num > 0:
  byte = num % 0x100
  print hex(byte)
  num //= 0x100

シフト/マスク:

num = 0x11aa22bb
while num > 0:
  byte = num & 0xff
  print hex(byte)
  num >>=8
于 2012-12-19T00:01:53.163 に答える
0
void splitByte(unsigned char * split, unsigned int a,int quantBytes)
{
  unsigned char aux;
  int i;
  for(i=0;i<quantBytes;i++)
  {
      split[i]=a&0x00FF; 
      a=(a>>8);
  }
  for(i=0;i<quantBytes-1;i++)
  {
      aux = split[i];
      split[i] = split[quantBytes-i-1];
      split[quantBytes-i-1] = aux;

  }
}

主に: unsigned char split[4]; splitByte(スプリット、0xffffffff、4); 強いテキスト

于 2015-02-23T17:43:52.757 に答える