我想修改这个函数以返回 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;