将HEX值转换为(字符,字符串,字母和数字)

时间:2012-04-21 08:12:21

标签: c

我正用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]);
}

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

1 个答案:

答案 0 :(得分:1)

十六进制值只是编写整数的另一种方式。 0xFF == 255。

因此,如果您想“拆分”它们,您需要先决定如何拆分它们。实际上,这决定了将拆分值填充到新数组中的确切方式。

要分割值,可以使用以下内容:

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

现在你有1个存储在high_nybble中,10个存储在low_nybble中。