1

私はCでAVRマイクロコントローラーAtmega16をプログラミングしています。

私はCを理解していません、私は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;
}

forループの内部では、6バイトの値に16進数でアクセスできます。

変数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;
(...)

出力を取得したい

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

その6(double)AA値を分離に変更したいので、12に変更します。

だから私はループを行うことができます

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

今、私はその値で遊ぶことができます、私はそれらを表示するために送ることができます、または私が必要とするものは何でも。

4

1 に答える 1

1

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

したがって、それらを「分割」する場合は、最初にそれらをどのように分割するかを決定する必要があります。これは、基本的に、分割された値を新しい配列に詰め込む正確な方法を決定します。

値を分割するには、次のようなものを使用できます。

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

これで、1つがhigh_nybbleに保存され、10つがlow_nybbleに保存されました。

于 2012-04-21T08:32:55.747 に答える