// HexToStrOrInt.cpp : コンソール アプリケーションの // エントリ ポイントを定義します。 // // バイトで表現された10進数を文字列と数値に変換する #include "stdafx.h" #include "windows.h" int ConvHexToStr ( BYTE* src, int iSrcLen, char* cDst ); char GetChar ( unsigned char c ); int ConvHexToInt ( BYTE* src, int iSrcLen, int* iDst ); int GetInt( unsigned char c ); int _tmain( int argc, _TCHAR* argv[] ) { BYTE src[4] = { 0x20, 0x16, 0x04, 0x06 }; char cDst[(4*2)+1]; memset( cDst, 0x00, sizeof( cDst ) ); ConvHexToStr( src, 4, cDst ); printf( "cDst=[%s]\n", cDst ); int iDst; ConvHexToInt( src, 4, &iDst ); printf( "iDst=[%d]\n", iDst ); getchar(); return 0; } int ConvHexToStr( BYTE* src, int iSrcLen, char* cDst ) { unsigned char c; for ( int i = 0; i < iSrcLen; i++ ) { // 上位4ビットの抜き出し c = src[i] >> 4; printf( "%dU:[%x]\n", i, c ); cDst[(i*2)] = GetChar( c ); // 下位4ビットの抜き出し c = src[i] & 0x0F; printf( "%dD:[%x]\n", i, c ); cDst[(i*2)+1] = GetChar( c ); } return 0; } char GetChar( unsigned char c ) { switch( c ) { case 0x00: return '0'; break; case 0x01: return '1'; break; case 0x02: return '2'; break; case 0x03: return '3'; break; case 0x04: return '4'; break; case 0x05: return '5'; break; case 0x06: return '6'; break; case 0x07: return '7'; break; case 0x08: return '8'; break; case 0x09: return '9'; break; default: exit(-1); break; } } int ConvHexToInt( BYTE* src, int iSrcLen, int* iDst ) { unsigned char c; *iDst = 0; for ( int i = 0; i < iSrcLen; i++ ) { int iBuf = 0; // 上位4ビットの抜き出し c = src[i] >> 4; printf( "%dU:[%x]\n", i, c ); iBuf = GetInt( c ) * 10; // 下位4ビットの抜き出し c = src[i] & 0x0F; printf( "%dD:[%x]\n", i, c ); iBuf += GetInt( c ); printf( "iBuf=[%d]\n", iBuf ); if ( i > 0 ) { // 1バイトで2桁分表現されているので // 2桁繰り上げる。 *iDst *= 100; } *iDst += iBuf; } return 0; } int GetInt( unsigned char c ) { switch( c ) { case 0x00: return 0; break; case 0x01: return 1; break; case 0x02: return 2; break; case 0x03: return 3; break; case 0x04: return 4; break; case 0x05: return 5; break; case 0x06: return 6; break; case 0x07: return 7; break; case 0x08: return 8; break; case 0x09: return 9; break; default: exit(-2); break; } }