'0' (0x30) の時も 0 で出力されます
テストプログラム
//アスキーを16進数
int8_t Asc2Hex(int8_t asc)
{
int8_t hex = 0;
if (('0' <= asc) && (asc <= '9')){
hex = asc - '0';
}
else if (('a' <= asc) && (asc <= 'f')){
hex = asc - 'a' + 10;
}
else if (('A' <= asc) && (asc <= 'F')){
hex = asc - 'A' + 10;
}
return hex;
}
void rs_out_hex( unsigned char dat ){
if ( dat<16 ){ Serial.write('0'); }
Serial.print( dat , HEX );
}
void setup() {
unsigned int i;
Serial.begin(9600);
Serial.println("Arduino Program Start !!");
Serial.print(" ");
for ( i =0 ; i<16 ; i++ ){ Serial.print(" +");Serial.print( i , HEX );}
Serial.println();
for ( i =0 ; i < 256 ; i++ ){
if ( i % 16 == 0 ){ rs_out_hex( i ); Serial.print(": "); }
Serial.print( Asc2Hex( i ) , HEX );
Serial.print(" ");
if ( i % 16 == 15 ){ Serial.println(); }
} // for
Serial.println("End");
}
void loop() {
}
結果 (シリアルモニタ)
Arduino Program Start !!
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
30: 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0
40: 0 A B C D E F 0 0 0 0 0 0 0 0 0
50: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
60: 0 A B C D E F 0 0 0 0 0 0 0 0 0
70: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
80: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
90: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
End
Asc2Hex → Asc2Hex4 へ変更すると スケッチが16バイト減少しました
最大32256バイトのフラッシュメモリのうち、スケッチが1954バイト(6%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が226バイト(11%)を使っていて、ローカル変数で1822バイト使うことができます。
↓
最大32256バイトのフラッシュメモリのうち、スケッチが1938バイト(6%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が226バイト(11%)を使っていて、ローカル変数で1822バイト使うことができます。
int8_t Asc2Hex4(int8_t asc){
if ( asc >= '0' && asc <= '9' ){ return asc - '0'; }
asc &= 0b11011111;
if ( asc >= 'A' && asc <= 'F' ){ return asc - 'A' + 10; }
return 0;
}