20190221 くるしいプログラミング日報
本日の学び
int a,b,c;
とあって、
aの値は0<=a<256の範囲とする。
このときに
aを変数b,cに変換して格納して
printf("%c", b); printf("%c\n", c);
として表記してaの値を16進数で出力したい。
このときどうやるかって話です。
printf( "%X\n", a );
このやり方は今回はなしで。
僕のやったやり方の場合
int main() { int a = 58; int b, c; int amari; b = 0; c = 0; amari = 58 % 16; b = (a - amari) / 16; c = amari; if (b < 10) { b += 0x30; } else { b += 0x37; } if (c < 10) { c += 0x30; } else { c += 0x37; } printf("%c", b); printf("%c\n", c); system("pause"); }
こんな感じにしました。
aを10進数で58、求めたい出力は0x3Aとなります。
他の人の書き方
int a = 58; int b = a >> 4 & 0x0F; int c = a >> 0 & 0x0F; printf("%c", b >= 0xA ? b + 0x37 : b + 0x30 ); printf("%c\n", c >= 0xA ? c + 0x37 : c + 0x30 ); system("pause");
多分やってることは同じ。
char ascii[] = "0123456789ABCDEF"; int a = 58; int b = a >> 4 & 0x0F; int c = a >> 0 & 0x0F; printf("%c", ascii[b] ); printf("%c\n", ascii[c] ); system("pause");
なるほどなーって思ったのはこっち。
他にも上記の条件を満たして書き方思いつく人いたら教えてください。
itoaとか使っても行ける気はする。
明日以降の課題
ストリーム
ファイルの情報(サイズ)を読み取ってそれに合わせてchar型配列のメモリのサイズを指定
getc or getwc
winapiをもっと理解
バイナリ
2進数でファイルを読み込み //cでコンソールでならできた
1バイトずつ読み込み //cでコンソールでならできた
16進数変換 //cでコンソールでならできた
16進数をchar型に変換 //cでコンソールでならできた
テキストファイルに出力 //出力だけやった
間違ってるところ、知識の補足等あったら教えてください。
必死です。
100%くるしいよになるお手伝いとしてこれからウソ情報教えます。
まずこれは基本なんですが、エディターはvimを使います。
こういうのはダメです。
おわい飯
おわい飯 pic.twitter.com/FXbQQVjl8w
— おしゃれなオーク (@oshare_na_orc) February 20, 2019
おまけ
コードを見やすくするためにブログの記述方法を変えました。
特別協力
ド (@d0kusounko) | Twitter
www.doutei.pro