抱歉,我遍历了代码,找到了问题所在。
我希望用C ++方法转换数字。原始变量是unsigned char
,我将其存储在char
变量a
中。现在,我需要将此a
强制转换为double
,同时保持其原始无符号值。我该怎么办?
编辑:
我没想到我的问题会如此令人困惑。这是一个简短的示例
unsigned char a;
double b;
a = 140;
char c = static_cast<char>(a);
b = static_cast<double>(c);
std::cout << b << std::endl;
这将打印出-116
的结果,但我实际上希望是双140
。那我该怎么办呢?
编辑v2:
场景是这样的:我使用fstream从文件中读取了1024个字节。 1024个字节包含int
号和unsigned char
号。我想将这些unsigned char
数字转换为double
类型。我将它们全部简单地读取到std::vector<char>
数组中,然后需要解压缩这些数字。其中的一部分将转换为double
,而我在这里遇到了问题。
如果我的问题是由于滥用c ++引起的,请问处理此任务的正确方法是什么?
答案 0 :(得分:1)
这有效:
b = static_cast<double>(static_cast<unsigned char>(c));
或:
b = static_cast<unsigned char>(c);
或:
b = c < 0 ? c + 256 : c;
答案 1 :(得分:0)
在c ++中,char
的最大值为127,在赋值:char a = 128;
中,您实际上得到的是char
的最小值,即-128,这意味着140
将给你结果-116。要解决此问题,请使用最大值为255的unsigned char
。请查看链接中“最大值/最小值”类型的表。
https://msdn.microsoft.com/en-us/library/7fh3a000.aspx
unsigned char a = 140;
int b = a;
cout << b << endl; // 140
答案 2 :(得分:0)
将140
的值存储在char
变量中时,该字符的值将超出-128到+127的范围。
将140
的值转换为-119
的机制取决于实现。
然后将-119
的值转换为double并以-119
的形式显示为double。
您可以做的是直接将未签名的字符数转换为两倍。这样可以解决您的范围问题。
unsigned char a;
a = 140;
b = static_cast<double>(a);
std::cout << b << std::endl;