Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

メモリをケチってchar型でカウンターを作ると

arduinoで動作チェックも兼ねたカウンターを作っておりました。
ここ数年、型を意識しないですむ言語ばかり扱っていたためか、久々にやらかしたのでメモ。
マイナスになる可能性がないカウンターなら、最初から符号なしにしましょう。

実際のところ

char cnt = 0;
char tartget[20] = "";
cnt = 0xff & cnt
sprintf(target, "%02x%s%s", cnt, "12","34");

とかでcharでカウンター回そうとしたら、以下のような挙動

7d
7f
ff80

出力側はsprintfで"%02x"とかやってます。
これは最低桁数を保証してくれるもので、溢れればそのまんま出力されます!
今回は0xffと0x80の組と判断されたみたいですね……
このあたりはちゃんと解析したいトコですが、とりあえずこの場を凌ぐには
unsigned char型にして、符号を排除すれば措定通り80,81...と余計なffがない状態でいけます。