我想修改此函数以返回4位packedBCD而不是解压缩任何指针的人。谢谢。
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;
}
}
答案 0 :(得分:0)
如果您将ReturnBCDFormat更改为接受整数0-9而不是字符&#39; 0&#39; - &#39; 9&#39;,或者您更改以下代码以添加&#39; 0& #39;对于传递给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;
}
}
如果性能在这方面至关重要,你可以将一对数字打包成一个无符号字符,可能使用一个向量来保存它,但上面的代码仍应比字符串流解决方案更快。
答案 1 :(得分:0)
首先转换为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;
除非这不能给出你想要的二进制表示。但是提到这个问题How to print (using cout) the way a number is stored in memory?会产生
std::bitset< sizeof( int ) > binary( encoded );
cout << binary << std::endl;