【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


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

No.19137

16進数でデータを設定する方法について
投稿者---boo-san(2005/01/12 14:33:14)


初めて投稿させて頂きます。

処理の中で扱いたいデータがあるのですが、英数字以外のコードのデータもあり、普通に文字列として扱えないので16進数で文字コードとして変数もしくは定数(基本的に更新する要件はないので)定義をしたいと思っています。

定義したいデータ長が1024byteあるせいかdefine分やcharで0x・・・と定義してもうまくいきません。

#define HEX 0xCAB85EFC3E792632C4C2E7ED90D25BD8\
            3129A27E4AD342D71F5DA3BBDAA75E57\
                 :
                 :
これだと大きすぎるようでprintfで表示しようとしてもNGでした。

又は

char *str="0xCAB85EFC3E792632C4C2E7ED90D25BD8\
       3129A27E4AD342D71F5DA3BBDAA75E57\
                 :
                 :
      "
これだと見たままの文字列になってしまう。
このようなケースでは1文字ずつ配列に設定するのが一般的でしょうか?
char HEX[0]=0xCA
char HEX[1]=0xB8
   :
   :

OSはHP-UX 11.00を使用しています。
C言語の知識はかなり不足してますのでうまく主旨が伝わったか不安ですがよろしくお願い致します。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:16進数でデータを設定する方法について 19141 ハンス 2005/01/12 15:36:58


No.19141

Re:16進数でデータを設定する方法について
投稿者---ハンス(2005/01/12 15:36:58)


char HEX[1024] = {0xCA,0xB8,続く} ;
とか


この投稿にコメントする

削除パスワード

No.19142

Re:16進数でデータを設定する方法について
投稿者---REE(2005/01/12 16:01:54)


>char HEX[1024] = {0xCA,0xB8,続く} ;
>とか

char HEX[1024] = "\xCA\xB8\x..." ;
でも行けます。


この投稿にコメントする

削除パスワード

No.19143

Re:16進数でデータを設定する方法について
投稿者---だん(2005/01/12 17:01:33)


データをファイルに格納して
ファイルアクセスしてデータを取得した方が楽だと思うのですが
そういうやり方はなしですか?


この投稿にコメントする

削除パスワード

No.19144

Re:16進数でデータを設定する方法について
投稿者---REE(2005/01/12 17:23:53)


>データをファイルに格納して
>ファイルアクセスしてデータを取得した方が楽だと思うのですが
>そういうやり方はなしですか?

場合によってはありえるでしょう。
しかし、一般的には、高々1024バイトの定数のために、
実行ファイルの他にデータファイルを用意するのはどうかと思います。



この投稿にコメントする

削除パスワード

No.19145

Re:16進数でデータを設定する方法について
投稿者---boo-san(2005/01/12 17:52:52)


皆様ありがとうございます。

定義自体はまとめては無理なんですね。
1個ずつ0xXXって書くのが大変そうなのでまとめて記述出来たらと期待したのですが。
定義自体は教えて頂いたようにしたいと思います。

また、ファイルに定義しておいたらというコメントに対して一応補足させて頂きます。
元々シェルスクリプトでやろうとしたのですが、処理にパスワードが必要な為、シェルもしくはファイルに直に書くには危険かと思い、プログラムに埋め込んで隠蔽したかったのが発端です。

もちろんこれだけではセキュリティ的にまだ足りないのですが・・・。

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



この投稿にコメントする

削除パスワード

No.19146

Re:16進数でデータを設定する方法について
投稿者---とおりすがり(2005/01/12 18:09:57)


>定義自体はまとめては無理なんですね。

ただ単にまとめて書きたいというだけなら、
char *str="CAB85EFC3E792632C4…";
と文字列リテラルとして用意した上で、あとからfor文等のループでchar型なり
何なりの配列に、格納し直せばよいのでは?
2文字ずつ解釈して、数値化すればいいだけです。


この投稿にコメントする

削除パスワード

No.19147

Re:16進数でデータを設定する方法について
投稿者---ぽこ(2005/01/12 18:32:21)


>定義自体はまとめては無理なんですね。
>1個ずつ0xXXって書くのが大変そうなのでまとめて記述出来たらと期待したのですが。

ソースに定義したいデータがバイナリファイルである場合、
私なら下のようなプログラムで、データ定義部分を出力させます。
あとはソースにコピペ。

#1000個以上データ入力よりは楽なはず。。
#include <stdio.h>

int main( int argc, char* argv[] )
{
    unsigned char c;
    FILE * fp = fopen(argv[1], "rb");
    
    while(!feof(fp)) {
        fread(&c,1,1,fp);
        printf("0x%1X, ",c);
    }

    fclose(fp);

    return 0;
}




この投稿にコメントする

削除パスワード

No.19148

Re:16進数でデータを設定する方法について
投稿者---とおりすがり(2005/01/12 20:24:38)


unix環境ならawkでへろっと。

awk --field-separator="" 'BEGIN { print "char data[] = {" } { for (i = 1; i < NF; i += 2) print " 0x"$i$(i+1)"," } END { print "};"}' data.txt

<出力結果>
char data[] = {
  0xCA,
  0xB8,
  0x5E,
  0xFC,
  0x3E,
  0x79,
  0x26,
  0x32,
  0xC4,
};



この投稿にコメントする

削除パスワード

No.19151

Re:16進数でデータを設定する方法について
投稿者---ぽこ(2005/01/12 22:40:01)


>unix環境ならawkでへろっと。

マニュアル引いてawk,sedの使い方を調べるよりCで書いたほうが早かったんで。。^^;
勉強になりました。



この投稿にコメントする

削除パスワード

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