c++ - 将二进制编码的十进制 (BCD) 解码为无符号整数

标签 c++ bcd

在我的项目中使用的值是用4位二进制编码的十进制数(BCD)表示的,它最初存储在一个字符缓冲区中(例如,由指针指向 const unsigned char *) .我想将输入的 BCD 字符流转换为整数。你能告诉我一个有效和快速的方法吗?

数据格式示例和预期结果:

BCD*2; 1001 0111 0110 0101=9765
       "9"  "7"  "6"  "5"

非常感谢!

最佳答案

unsigned int lulz(unsigned char const* nybbles, size_t length)
{
    unsigned int result(0);
    while (length--) {
        result = result * 100 + (*nybbles >> 4) * 10 + (*nybbles & 15);
        ++nybbles;
    }
    return result;
}

length 指定输入中的字节数,因此对于 OP 给出的示例,nybbles 将是 {0x97, 0x65} code> 和 length 将为 2。

关于c++ - 将二进制编码的十进制 (BCD) 解码为无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138060/

相关文章:

c++ - 为什么动态分配的两个变量的内存位置不连续?

C++ 和 Objective-c

c++ - operator== 是友元时的链接器错误

c++ - "Error in the program"谁能清除这个错误..? (Linux 帧缓冲区程序)

将非常大的数字从二进制转换为十进制并打印出来

java - 用Java模拟ADC指令

delphi - 将数据类型 ftFloat 转换为 ftBCD

c++ - 打印队列中的数组

c++ - 8位BCD校验

c# - 将 int 转换为 BCD 字节数组