10进制数转BCD码

 

 

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位 
    }
}

 

posted @ 2024-08-05 16:11  BlackSnow  阅读(168)  评论(0)    收藏  举报