我正用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]);
}
现在我可以玩这些值,我可以将它们发送到显示器,或者我需要的任何东西。
答案 0 :(得分:1)
十六进制值只是编写整数的另一种方式。 0xFF == 255。
因此,如果您想“拆分”它们,您需要先决定如何拆分它们。实际上,这决定了将拆分值填充到新数组中的确切方式。
要分割值,可以使用以下内容:
hexval = 0x1A
low_nybble = hexval & 0xF
high_nybble = (hexval >> 4) & 0xF
现在你有1个存储在high_nybble中,10个存储在low_nybble中。