我应该如何将包含六个值的uint8数组转换为打包的bcd值? 一个简单的4位换档就能完成这项工作吗? 可能的话,我希望代码中的一些示例可以更好地理解我的问题
答案 0 :(得分:0)
以下代码是如何进行转换的示例。它将BCD数字放入4位半字节,例如s="4660"
==> bcd[]= {0x46, 0x60}
void toBCD(int x)
{
int nchars, k;
char s[20], *cp=s;
unsigned char b, bcd[20], *p=bcd;
nchars= sprintf(s,"%d",x);
k=0;
while (*cp) {
b = (unsigned char)(*cp++ - '0');
if (k==0) {
*p= b;
k= 1;
}
else {
*p= (*p<<4) | b; //shift left and put in right nibble
p++;
k= 0;
}
}
if (k==1)
*p= (*p<<4);
}
(代码不会返回任何有意义的内容;它只是转换的一个示例)