c
1 2#include <stdio.h> 3#pragma warning(disable: 4996) 4 5#define H_PRT 0x02// ヘッダ印字オプション 6#define C_PRT 0x01// 文字印字オプション 7#define ROW 16 // 1行に表示する文字 8//プロトタイプ宣言 9void dump(char title, char* staddr, int offset, int dsize, char opt); 10 11void main(void) { 12 13 int filcnt;// フィル用のカウンタ 14 15 char bin_data[512];// テストデータ用のバッファ 16 char asc_data[] = "01234567809 ABCあいうえおかきくけこDEFGHIJKLMNOPQRSTUVWXYZ 漢字表示のテスト abcdefghijklmnopqrstuvwxyz01234567809ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz"; 17 18 for (filcnt = 0; filcnt < 512; filcnt++) bin_data[filcnt] = filcnt & 0xff; // テスト用のテーブルを0からFFで埋める 19 20 dump("\nASCIIdata 文字印字あり", asc_data, 0, 65, H_PRT + C_PRT); 21 dump("\nBINARYdata 文字印字あり", bin_data, 0, 512, H_PRT + C_PRT); 22} 23 24 25void dump(char title, char* staddr, int offset, int dsize, char opt) { 26 27 int startcnt = 0;// ダンプするバイト数のカウント 28 int bytecnt; // 16回ループさせる 29 int display = 0; //表示文字 30 while (startcnt < dsize) { 31 32 for (bytecnt = 0; bytecnt < ROW; bytecnt++) { 33 34 if (startcnt < dsize) { 35 36 printf("%02x", staddr[display]); 37 38 display++; 39 40 } 41 else 42 43 printf(" "); 44 45 display++; 46 47 } 48 startcnt++; 49 50 printf("\n"); 51 } 52}
出力を
0001 0203 0405 0607 0809 0a0b 0c0d 0e0f
1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
2021 2223 2425 2627 2829 2a2b 2c2d 2e2f
3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
4041 4243 4445 4647 4849 4a4b 4c4d 4e4f
5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
6061 6263 6465 6667 6869 6a6b 6c6d 6e6f
7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
8081 8283 8485 8687 8889 8a8b 8c8d 8e8f
9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf
b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf
d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef
f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
このようにしたいのですが
うまくいきません。 アドバイス頂けると助かります。
-----追記部分-----
303132333435363738303920414243ffffff82
ffffffa0ffffff82ffffffa2ffffff82ffffffa4ffffff82ffffffa6ffffff82ffffffa8ffffff82ffffffa9ffffff82ffffffabffffff82ffffffadffffff82
ffffffafffffff82ffffffb14445464748494a4b4c4d4e4f50
5152535455565758595a20ffffff8affffffbfffffff8effffff9affffff95
5cffffff8effffffa6ffffff82ffffffccffffff8365ffffff8358ffffff83672061626364
65666768696a6b6c6d6e6f7071727374
75767778797a30313233343536373830
394142434445464748494a4b4c4d4e4f
505152535455565758595a2061626364
.
.
.
.
303132333435363738393a3b3c3d3e3f
ffffffb0ffffffb1ffffffb2ffffffb3ffffffb4ffffffb5ffffffb6ffffffb7ffffffb8ffffffb9ffffffbaff
C:\Users\admin\source\repos\Project1\Debug\Project1.exe (プロセス 19156) は、コード -1073741819 を伴って終了しました。
このウィンドウを閉じるには、任意のキーを押してください . . .
コードを実行するとこのような結果になってしまいます。
----追記部分2----
c
1void dump(char* title, unsigned char* staddr, int offset, int dsize, char opt) { 2 3 int startcnt = 0;// ダンプするバイト数のカウント 4 int bytecnt; // 16回ループさせる 5 int savecnt = 0; 6 7 while (startcnt < dsize) { 8 9 savecnt = startcnt; 10 11 for (bytecnt = 0; bytecnt < ROW; bytecnt++) { 12 13 if (startcnt < dsize) { 14 printf("%02x", staddr[startcnt]); //16進数で出力 15 } 16 else { 17 printf(" "); 18 } 19 if (startcnt % 2 != 0) { 20 printf(" "); 21 } 22 startcnt++; 23 } 24 25 }
16進数の表示は上記のコードに修正して上手くいきました。
しかし、文字で表示しようとすると
c
1//文字の出力 2 for (bytecnt = 0; bytecnt < ROW; bytecnt++) { 3 4 startcnt = savecnt; 5 6 if (startcnt < dsize) { 7 printf("%c", staddr[startcnt]); 8 } 9 else { 10 printf(" "); 11 } 12 if (startcnt % 2 != 0) { 13 printf(" "); 14 } 15 startcnt++; 16 } 17 printf("\n"); 18 19}
結果
3031 3233 3435 3637 3830 3920 4142 4382 a082 a282 a482 a682 a882 a982 ab82 ad82 af82 b144 4546 4748 494a 4b4c 4d4e 4f50 5152 5354 5556 5758 595a 208a bf8e 9a95 5c \\\\
0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
文字が表示されません。
printf("%c", staddr[startcnt]);
ここの出力がおかしいのでしょうか?
回答3件
あなたの回答
tips
プレビュー