
void StringToBCD(const char* strSource, uint8_t byBCDTarget[8])
{
// 初始化BCD数组
memset(byBCDTarget, 0, 8);
// 计算输入字符串的长度
size_t length = strlen(strSource);
// 确保不超过8位BCD数字
if (length > 16) {
length = 16;
}
// 从字符串末尾开始遍历,转换每一位
for (size_t i = 0; i < length; i++) {
// 将字符转换为数字
char currentChar = strSource[length - 1 - i]; // 从末尾开始
if (currentChar < '0' || currentChar > '9') {
// 处理无效字符的情况
printf("输入无效:发现非数字字符 '%c'。\n", currentChar);
return;
}
uint8_t digit = currentChar - '0';
// 将BCD存储在相应的字节中(每个字节可以保存两个BCD数字)
byBCDTarget[i / 2] |= (digit << ((i % 2) * 4));
// byBCDTarget[i / 2] |= (i % 2 == 0) ? digit : (digit << 4); // 偶数位放低4位, 奇数位放高4位
}
}
