Visual Studio 2008 C ++アプリケーションがあり、ビットマップ(画像ではない)を受け取ります。反転される各ビットは、デコードマップ上の位置に対応します。
typedef unsigned char BYTE;
const unsigned int COL_COUNT = 8;
const unsigned int ROW_COUNT = 4;
static char g_decode_map[ ROW_COUNT ][ COL_COUNT ] =
{
{ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' },
{ 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p' },
{ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x' },
{ 'y', 'z', ',', '.', ' ', ':', '-', '+' }
};
// current implementation
void Decode( const BYTE bitmap[ ROW_COUNT ],
const char decode_map[ ROW_COUNT ][ COL_COUNT ],
char decoded[ ROW_COUNT * COL_COUNT ] )
{
int found = 0;
for( int i = 0; i < ROW_COUNT; ++i )
{
for( int j = 0; j < COL_COUNT; ++j )
{
if( std::bitset< COL_COUNT >( bitmap[ i ] ).test( j ) )
{
decoded[ found++ ] = g_decode_map[ i ][ COL_COUNT - j - 1 ];
}
}
}
}
int main( int argc, char* argv[] )
{
BYTE bitmap[ ROW_COUNT ] = { 0x01, 0x80, 0x00, 0x00 };
// expected output { 'h', 'i' } or { 'i', 'h' } order is unimportant
char decoded[ ROW_COUNT * COL_COUNT + 1 ] = { };
Decode( bitmap, g_decode_map, decoded );
printf( "Decoded: %s\r\n", decoded );
return 0;
}
私の現在のデコード実装は正常に機能しますが、これを行うためのより効率的な方法があるかもしれないと私は思います。誰かがよりパフォーマンスの高いアルゴリズムを提案できますか?