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 字节值。

在变量 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;
(...)

等到 12,因为我想将 6(双)AA 值更改为分开。

那么我可以做一个循环

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

现在我可以使用这些值,我可以将它们发送到显示,或者我需要的任何东西。

4

1 回答 1

1

十六进制值只是写入整数的另一种方式。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 回答