0

HEX 文字列があり、C/C++ で ASCII 文字列に変換したいと考えています。どうすればこれを達成できますか??

未使用の位置は #F で埋められます。例: 数字列 1234567 は、16 の予約位置 (8 バイト) を持つフィールドに書き込まれます。

  Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7

16 進数 1 2 3 4 5 6 7 FFFFFFFFF

入力: 0x12 0x34 0x56 0x7f 0xff 0xff 0xff 0xff

出力: 1234567

4

1 に答える 1

1

例で示したエンコーディングはBCDのようです。つまり、1 バイトは 2 桁を格納できます。各桁は 4 ビットで表されます。4 ビットが 1001 バイナリ (9 10 進数) より大きい場合、それを無効な数値として解釈する必要があり、16 進数の FF は空白として解釈されると思います。ビット単位の演算子を使用して、バイト内の各ニブルにアクセスできます。

//Let's say a byte of your input is stored as 'a'
    char a = 0x15; //This is 15 BCD

    //separate lower and upper nibble
    char lower_nibble=a&0x0F;
    char upper_nibble=(a&0xF0)>>4;

    //convert to ASCII
    if(lower_nibble > 9) lower_nibble =' '; //space
    else lower_nibble = '0' + lower_nibble; //convert to ASCII
    if(upper_nibble > 9) upper_nibble =' '; //space
    else upper_nibble = '0' + upper_nibble; //convert to ASCII

    std::cout<<"\n A is: "<<upper_nibble<<" "<<lower_nibble;
于 2013-03-21T12:22:56.563 に答える