将十进制数转换为包装 BCD,反之亦然
Converting Decimal Numbers to PackedBCD and Versa
我想修改这个函数以返回 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;
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 在C++中,将int值赋给enum,反之亦然
- 如何在 c++ 中将所有大写字母转换为字符串中的小写字母,反之亦然?
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- 用非原子更新原子变量,反之亦然
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- 如何在 OpenCL 中将小写转换为大写,反之亦然
- 如何将CNG密钥转换为OpenSSL EVP_PKEY(反之亦然)?
- C++ - 使用结构数据类型将单词中的单个小写字符更改为大写,反之亦然
- BCD(卡西欧串行接口)中的编码数字
- 快速将无符号字符的向量强制转换为POD结构的向量,反之亦然
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 使用C++将越南语字符从ISO88591、UTF8、UTF16BE、UTF16LE和UTF16编码为十六进制,反之亦然
- AVX2 SIMD Instrinsics 16 位到 8 位,反之亦然
- 将 char[] 数组转换为字节,然后将字节转换为 int,反之亦然
- 将字节数组 (uint8_t) 转换为单词数组 (uint16_t),反之亦然
- 在Qt中将QString转换为ASCII值,反之亦然
- 封送处理 - 转换 std::向量<char>到字符串^ 反之亦然
- 将十进制数转换为包装 BCD,反之亦然