2012-04-21 26 views
1

私はC.(文字、文字列、文字と数字)に変換するHEX値に

でのプログラミングAVRマイクロコントローラATmega16でよ、「私はPHPで私の時間のプログラミングを過ごす、と私はちょうどドンCで入手してください。

ここでソースコードを投稿する方法はありません。 誰かが知っている場合は、私のタグを修正してください。

私の問題は、私はこの機能を持って、次のとおりです。ループのための

unsigned char 
convert_sn_to_string (const unsigned char *SN_a /* IDstring */  ) 
{ 
    unsigned char i; 

    for (i = 0; i < 6; i++) //6 byte az SN 
    { 

if(SN_a[i]==0x00) 
    { 
    Send_A_String("00"); 
    } 


    } 


    return 1; 
} 

インサイド私は六角で6バイトの値をアクセスもできます。変数SN_Aインサイド

私は

SN_A[0]=0x00; 
SN_A[1]=0xFF; 
SN_A[3]=0xAA; 
SN_A[4]=0x11; 
(...) 

と同様のを持つことができます。 00〜FFになる可能性があります。

私が必要とするのは、そのコードを12文字の文字列に変換することです。 私は

SN_A[0]=0x00; 
SN_A[1]=0xFF; 
SN_A[3]=0xAA; 
SN_A[4]=0x11; 
(...) 

を持っている場合、私は私が分離に6(ダブル)AA値その変更を、希望するので、出力12に

new[0]=0; 
new[1]=0; 
new[2]=A; 
new[3]=A; 
new[4]=1; 
new[5]=1; 
(...) 

とそうで取得したいと思います。

それでは私は今、私はその値を使用して遊ぶことができるループ

for i=0 i<12 i++ 
{ 
    do_something_with_one_letter(new[i]); 
} 

を行うことができますが、私は表示、または私は必要なものするためにそれらを送信することができます。

答えて

1

16進数値は、単に整数を書き込む別の方法です。 0xFF == 255.

したがって、それらを「分割」したい場合は、まず分割方法を決定する必要があります。これは、本質的に、分割された値を新しい配列に埋め込む正確な方法を決定します。値を分割する

、このようなものを使用することができます。

hexval = 0x1A 
low_nybble = hexval & 0xF 
high_nybble = (hexval >> 4) & 0xF 

をあなたは今high_nybbleとlow_nybbleに保存されている10に保存されている1を持っています。