1

こんにちは私はC++で16進数を2進数に変換する必要があります。これは、4x8のバイナリイメージを表します。たとえば、次の16進数0xc00e90は画像を表します。

00000000
11000000
00001110
10010000

これが私の実用的な解決策です。uは入力16進数#で、imageはbool配列[4][8]です。しかし、これは最適なソリューションではないと確信しています。これを実装するためのより良い方法は何でしょうか。

    for(int i=0;i<4;i++)
{
    std::bitset<8> bit((u>>(3-i)*8)&0xFF);
    cout<<bit<<"\n";
    for (int j=0;j<8;j++)
    {
        image[i][j]=(bool) bit[7-j];    
    }
}
4

1 に答える 1

1

実際uには16進数ではなく、基数の桁で表すまでは基数のない数値です。あなたの解決策は素晴らしいです、ビットセットを作成せずに行う別の方法:

uint32_t uu = u;
uint32_t mask = 0x80000000;
for (uint8_t i = 0; i < 32; i++) {
  image[i / 8][i % 8] = (bool) (uu & mask == mask);
  mask >>= 1;
}
于 2012-12-15T00:58:23.597 に答える