掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27708

16進数文字コード
投稿者---ハム(2006/07/25 16:34:58)


16進数の文字コードを読み込んで、それを文字へ変換するプログラムはどのように作成すればいいですか??

                while((n = fread(buf, 1, 16, fr)) > 0)  {
                    for(i=0;i<n;i++)    {
                        fprintf(fw, "%02X", (unsigned)buf[i]);
                    }
                }
これは、文字を文字コードへ変換する場合です


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:16進数文字コード 27709 nop 2006/07/25 16:37:37


No.27709

Re:16進数文字コード
投稿者---nop(2006/07/25 16:37:37)


>16進数の文字コードを読み込んで、それを文字へ変換するプログラムはどのように作成すればいいですか??

やりたいことをもっと具体的に、正しい日本語で表現して下さい。
そして、どこまで理解していて、何がわからないのか、明確にして下さい。


この投稿にコメントする

削除パスワード

No.27710

Re:16進数文字コード
投稿者---ハム(2006/07/25 16:48:23)


スイマセン、肝心なソースを載せるの忘れていました

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main(void)
{
    int n, i, x=0;
    char frname[80], fwname[80], ss[10];
    unsigned char buf[16];
    FILE *fr, *fw;

    puts("文字コード⇔文字変換");
    do  {
        puts("C = 文字コードに変換\nD = 文字に変換\nE = 終了");
        printf("...");
        gets(ss);
        switch(ss[0])   {
            case 'C':   /* 文字コードに変換 */
            case 'c':
                printf("File name=");
                gets(frname);
                /* 読み取りファイルオープン */
                fr=fopen(frname, "rb");
                if(fr == NULL)  {
                    puts("\a存在しないファイル名です");
                    getchar();
                    exit(1);
                }
                /* 書き込みファイルオープン */
                sprintf(fwname, "%s.code", frname);
                fw=fopen(fwname, "w");
                /* 変換・入力 */
                while((n = fread(buf, 1, 16, fr)) > 0)  {
                    for(i=0;i<n;i++)    {
                        fprintf(fw, "%02X", (unsigned)buf[i]);
                    }
                }
                /* ファイルクローズ */
                fclose(fr);
                fclose(fw);
                break;
            case 'D':   /* 文字に変換 */
            case 'd':
                printf("File name=");
                gets(frname);
                /* 読み取りファイルオープン */
                fr=fopen(frname, "r");
                if(fr == NULL)  {
                    puts("\a存在しないファイル名です");
                    getchar();
                    exit(1);
                }
                /* 書き込みファイルオープン */
                sprintf(fwname, "%s.decode", frname);
                fw=fopen(fwname, "w");
                /* 変換・入力 */
                /********************************************************/

                /* ファイルクローズ */
                fclose(fr);
                fclose(fw);
                break;
            case 'E':
            case 'e':
                x = 1;
                break;
            default:
                puts("\a入力ミスです!");
                break;
        }
    }   while(x != 1);

    puts("エンターを押して終了してください");
    getchar();
    return 0;
}

/*************************/←この部分の記述をどうすればいいかわかりません


この投稿にコメントする

削除パスワード

No.27711

Re:16進数文字コード
投稿者---Blue(2006/07/25 16:50:30)


strtol関数を調べてみるとよいでしょう。


この投稿にコメントする

削除パスワード

No.27715

Re:16進数文字コード
投稿者---ハム(2006/07/25 18:06:55)


ありがとうございます

/*************/
この部分を
                while((n = fread(buf, 1, 2, fr)) > 0)   {
                        a = strtol(buf, &e, 10);
                        fputc(isprint(a) ? a : '.', fw);
                }
に書き換えて試してみた結果

abcdefg
abcdefg


616263646566670D0A616263646566670D0A

=>?@ABC..=>?@ABC..

こういう変換になってしまいました
何度もスイマセン、何処がおかしいかヒントをお願いします


この投稿にコメントする

削除パスワード

No.27717

Re:16進数文字コード
投稿者---Blue(2006/07/25 18:18:51)


>何度もスイマセン、何処がおかしいかヒントをお願いします
16進の文字列を数値に変換するときは strtol の最後の引数は 16 を指定します。
ただし、終端文字'\0' で終わっていなければ使えません。
(freadの前にbufの初期化が必要(buf[2]が'\0'になるようにする))


この投稿にコメントする

削除パスワード

No.27718

Re:16進数文字コード
投稿者---ハム(2006/07/25 18:36:39)


ありがとうございました!!

プログラムは一応完成しました

buf=61
strtol(buf, &e, 16)
これは 61(10進数)を16進数(3D)へ変換って意味かと思ってました

それで strtol(buf, &e, 10) にして、どうやったら bufが16進数だとプログラムは解釈するのか…って考えてました

この時のbufは文字列だったんですね
失礼しました >_<;


この投稿にコメントする

削除パスワード

No.27712

Re:16進数文字コード
投稿者---ruby(2006/07/25 17:10:35)


入力ファイルと出力ファイルの仕様を教えてください。


この投稿にコメントする

削除パスワード

No.27713

Re:16進数文字コード
投稿者---ハム(2006/07/25 17:17:00)


入力ファイルも出力ファイルも 空白系文字をいれずに保存します


test.txtをコードへ変換
テキスト内容
abcdefg
abcdefg

変換後文字列(test.txt.codeの内容)
616263646566670D0A616263646566670D0A

です


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧