C言語関係掲示板

過去ログ

No.912 char[4]にPackedDecimalで保存されている値をchar[8]に編集したい

[戻る] [ホームページ]
No.11572

PackedDecimal → char 変換
投稿者---ひこ(2004/01/08 16:40:27)


こんにちは。C言語の開発中です。
char[4]にPackedDecimalで保存されている値をchar[8]に編集したいと思ってます。

char char_A[4];
char_Aには0x12345678と値が入ってます。

これを
char char_B[8]; に
0x3132333435363738
になるように入れたいのですがどうすればいいでしょうか?

逆にchar →Pack変換なら
char_A[0] =(char_B[0] & 0xF) << 4 | (char_B[1] & 0xF);
char_A[1] =(char_B[2] & 0xF) << 4 | (char_B[3] & 0xF);
char_A[2] =(char_B[4] & 0xF) << 4 | (char_B[5] & 0xF);
char_A[3] =(char_B[6] & 0xF) << 4 | (char_B[7] & 0xF);
これでいけると思うんですけど・・・
Pack → char変換がわかりません

どなたか宜しくお願いします


No.11573

Re:PackedDecimal → char 変換
投稿者---YuO(2004/01/08 17:22:39)


>char char_A[4];
>char_Aには0x12345678と値が入ってます。
>これを
>char char_B[8]; に
>0x3132333435363738
>になるように入れたいのですがどうすればいいでしょうか?

char_Aを一旦数値に直して,sprintf。
ただし,sprintfの出力は9バイト必要になるので,さらにstrncpyも必要。


No.11575

Re:PackedDecimal → char 変換
投稿者---ひこ(2004/01/08 18:18:46)


>
>char_Aを一旦数値に直して,sprintf。
>ただし,sprintfの出力は9バイト必要になるので,さらにstrncpyも必要。

すみません・・・数値に直すってatoiを使うってことですか?


No.11577

Re:PackedDecimal → char 変換
投稿者---YuO(2004/01/08 18:25:43)


>すみません・・・数値に直すってatoiを使うってことですか?

違います。
char_A[]からunsigned longの値を一旦作成する,ということです。
まぁ,精度等をきっちり指定すれば,char_A[]のままsprintfに渡すこともできますが……。


No.11578

Re:PackedDecimal → char 変換
投稿者---かずま(2004/01/08 18:36:31)


    for (i = j = 0; i < 4; i++) {
        char_B[j++] = char_A[i]>>4 & 0x0F | 0x30;
        char_B[j++] = char_A[i]    & 0x0F | 0x30;
    }


No.11579

Re:PackedDecimal → char 変換
投稿者---ひこ(2004/01/08 19:01:22)


YuOさん、かずまさん、ありがとうございました!
おかげで解決しました!
ほんとに助かりました!