Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从整数到BCD的转换_C++_Bcd - Fatal编程技术网

C++ 从整数到BCD的转换

C++ 从整数到BCD的转换,c++,bcd,C++,Bcd,我想将整数(其最大值可以达到9999999)转换为BCD并存储到4个字符的数组中。 例如: 输入为:12345(整数) 输出的BCD格式应为=“00012345”,存储在4个字符的to数组中。 此处0x00 0x01 0x23 0x45以BCD格式存储。 我试着用下面的方式,但没有成功 int decNum = 12345; long aux; aux = (long)decNum; cout<<" aux = "<<aux<<endl; char* str

我想将整数(其最大值可以达到9999999)转换为BCD并存储到4个字符的数组中。 例如: 输入为:12345(整数) 输出的BCD格式应为=“00012345”,存储在4个字符的to数组中。 此处
0x00 0x01 0x23 0x45
以BCD格式存储。 我试着用下面的方式,但没有成功

int decNum = 12345;
long aux;
aux = (long)decNum;
cout<<" aux = "<<aux<<endl;

char* str = (char*)& aux;
char output[4];
int len = 0;
int i = 3;
while (len < 8)
{
cout <<"str: " << len << " " << (int)str[len] << endl;
unsigned char temp = str[len]%10;
len++;
cout <<"str: " << len << " " << (int)str[len] << endl;
output[i] = ((str[len]) << 4) | temp;
i--;
len++;
}
int decNum=12345;
长aux;
aux=(长)decNum;

cout
str
实际上指向一个长的(可能是4个字节),但是迭代访问8个字节。
操作
str[len]%10
看起来好像需要数字,但只有二进制数据。此外,我怀疑
I
会变为负值。

首先,不要使用C样式转换(如
(长)a
(char*)
)。它们是一股难闻的气味。取而代之的是学习和使用C++风格的转换(比如<代码> StasyType(a)< /C> >,因为它们指出了你在做什么是危险的事情,而不是只是默默地工作,造成了不明确的行为。
char*str=(char*)&aux
给你一个指向aux字节的指针——它实际上是
char*str=reinterpret\u cast(&aux)。它不会提供包含数字的传统字符串
sizeof(char)
是1,
sizeof(long)
几乎肯定是4,因此
aux
变量中只有4个有效字节。你继续尝试阅读其中的8篇

我怀疑这是你想要它做的。如果你想把一个数字打印成一个字符串,你必须运行实际的代码,而不仅仅是重新解释内存中的位

std::字符串s;std::stringstream-ss;ss>s
将创建一个
std::string
,其中以
aux
为基数的10位数字

然后,您可以查看
s
中的字符来构建BCD


<>这远远不是最快的方法,但至少接近你原来的方法。

< p>首先对不起C代码,我被欺骗了,因为这是一个C问题开始,移植到C++不应该真的那么大。p> 如果你真的希望它是在一个字符数组中,我会做一些类似于下面的代码的事情,我发现仍然保留一个小的endian格式的结果很有用,这样我就可以将它转换成
int
进行打印,但是这并不是严格必要的:

#include <stdio.h>

typedef struct
{
    char value[4];
} BCD_Number;

BCD_Number bin2bcd(int bin_number);

int main(int args, char **argv)
{
    BCD_Number bcd_result;

    bcd_result = bin2bcd(12345678);

    /* Assuming an int is 4 bytes */
    printf("result=0x%08x\n", *((int *)bcd_result.value));

}

BCD_Number bin2bcd(int bin_number)
{
    BCD_Number bcd_number;  

    for(int i = 0; i < sizeof(bcd_number.value); i++)
    {
        bcd_number.value[i] = bin_number % 10;
        bin_number /= 10;
        bcd_number.value[i] |= bin_number % 10 << 4;
        bin_number /= 10;
    }

    return bcd_number;
}
#包括
类型定义结构
{
字符值[4];
}BCD_编号;
BCD_编号bin2bcd(内部bin_编号);
int main(int参数,字符**argv)
{
BCD_编号BCD_结果;
bcd_结果=bin2bcd(12345678);
/*假设int为4字节*/
printf(“结果=0x%08x\n”,*((int*)bcd_result.value));
}
BCD_编号bin2bcd(内部bin_编号)
{
BCD_编号BCD_编号;
对于(int i=0;ibcd_number.value[i]|=bin_number%10我添加了一组代码,用于在以下位置将无符号整数转换为bcd: