将十进制数转换为包装 BCD,反之亦然



我想修改这个函数以返回 4 位打包的 BCD,而不是解压缩任何带有任何指针的人,谢谢。

string dfc = ConvertDecimalToBCD((int)decimalNumber);
cout<<"BDCValue::"<<dfc<<endl;
cout<<endl;

对于十进制数2000我想得到0010 0000而不是0010 0000 0000 0000. 如果可能的话

    string ConvertDecimalToBCD(int decimal)
    {
        int i = decimal;
        string s, temp, final;
        stringstream out;
        out << i;
        s = out.str();
        for (int i = 0; i < s.size(); i++)
        {
            temp = ReturnBCDFormat(s[i]);
            final = final+temp;
        }
        return final;
    }

返回 BCD 格式的函数。

string ReturnBCDFormat(char num)
{
    switch (num)
    {
    case '0':
        return "0000";
        break;
    case '1':
        return "0001";
        break;
    case '2':
        return "0010";
        break;
    case '3':
        return "0011";
        break;
    case '4':
        return "0100";
        break;
    case '5':
        return "0101";
        break;
    case '6':
        return "0110";
        break;
    case '7':
        return "0111";
        break;
    case '8':
        return "1000";
        break;
    case '9':
        return "1001";
        break;
    default:
        return "2";
        break;
    }
}
如果您将 ReturnBCDFormat 更改为接受整数 0-9 而不是字符 '0'

-'9',或者您更改下面的代码以将"0"添加到传递给 ReturnBCDFormat 的参数中,这应该可以工作:

string ConvertDecimalToBCD(int decimal)
{
    if(decimal == 0)
       return "0";
    else
    {
      string result;
      while(decimal > 0)
      {
        result = ReturnBCDFormat(decimal % 10) + result;
        decimal /= 10;
      }
      return result;
    }
}

如果性能对此至关重要,您可以将一对数字打包到无符号字符中,可能使用向量来保存它,但上面的代码仍然应该比字符串流解决方案更快。

首先转换为 BCD 二进制编码,然后打印为十六进制。

    int raw = 7947;
    int encoded = 0;
    int i = 0; 
    while ( raw != 0 )
    {
        int tenth = raw % 10;
        encoded |= tenth << (i * 4);
        raw /= 10;
        ++i;
    }
    cout << hex << encoded << std::endl;

或直接生成字符串

    int raw = 7947;
    string encoded;

    do {
        int tenth = raw % 10;
        encoded.insert( 0, 1, '0' + tenth ); // depends on ASCII digit 
        raw /= 10;
    }
    while ( raw > 0 );
    cout << encoded << std::endl;

除非这不会提供您想要的二进制表示形式。但是提到这个问题 如何打印(使用 cout)数字存储在内存中的方式?收益 率

std::bitset< sizeof( int ) > binary( encoded );
cout << binary << std::endl;

最新更新