Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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
如何将double转换为无符号字符? 我想用C++改变双倍向量变成无符号字符。 为了确保它有效,我写了: unsigned char x = 0; double y = 4.6; x = (unsigned char) y; printf("%d", y); cout << endl << "the char of 4.6 is: " << x; getchar(); 无符号字符x=0; 双y=4.6; x=(无符号字符)y; printf(“%d”,y); 库特_C++_Casting_Type Conversion_Double_Unsigned Char - Fatal编程技术网

如何将double转换为无符号字符? 我想用C++改变双倍向量变成无符号字符。 为了确保它有效,我写了: unsigned char x = 0; double y = 4.6; x = (unsigned char) y; printf("%d", y); cout << endl << "the char of 4.6 is: " << x; getchar(); 无符号字符x=0; 双y=4.6; x=(无符号字符)y; printf(“%d”,y); 库特

如何将double转换为无符号字符? 我想用C++改变双倍向量变成无符号字符。 为了确保它有效,我写了: unsigned char x = 0; double y = 4.6; x = (unsigned char) y; printf("%d", y); cout << endl << "the char of 4.6 is: " << x; getchar(); 无符号字符x=0; 双y=4.6; x=(无符号字符)y; printf(“%d”,y); 库特,c++,casting,type-conversion,double,unsigned-char,C++,Casting,Type Conversion,Double,Unsigned Char,带圆孔的钻石符号 (无符号字符)4.6被截断为4 但是当您coutachar时,它会打印相应的字符(例如cout 这只是一个bug--y是双精度的,%d格式说明符用于整数 但是主要的问题是逻辑问题——你把数字和它们的表示法搞混了。当你打印出数字4时,没有理由期望它看起来像十进制数字“4”。我假设你意识到字符只能保存双精度的整数部分,而且在大多数情况下直到255(这就是为什么如果您想要完整的数字,通常会将double转换为char*到string)。因此,您真正想要的是将double的整数部分转换

带圆孔的钻石符号

(无符号字符)4.6
被截断为
4

但是当您
cout
a
char
时,它会打印相应的字符(例如
cout
这只是一个bug--
y
是双精度的,
%d
格式说明符用于整数


但是主要的问题是逻辑问题——你把数字和它们的表示法搞混了。当你打印出数字4时,没有理由期望它看起来像十进制数字“4”。

我假设你意识到字符只能保存双精度的整数部分,而且在大多数情况下直到255(这就是为什么如果您想要完整的数字,通常会将double转换为char*到string)。因此,您真正想要的是将double的整数部分转换为char,这样词法转换就可以实现这一点(或itoa,stringstream函数)。例如:

#包括
int main(){
无符号字符x;
双y=4.6;
x=boost::词法转换((int)y);
printf(“%f”,y);

你为什么要做这样不安全的转换?你想做什么?那么为什么printf给我1717986918。我以为这是在它之前把它转换成一个整数prints@user2719805因为您使用了错误的格式说明符来打印double,或者使用了错误的参数类型来打印int。啊,是的,很抱歉,我错过了这一部分问题。@WhozCraig答对了。我的答案只包括“带cout的钻石符号”部分。已修复。再次抱歉忽略了该部分。
double y = 4.6;
char x = y;     // x == 4
cout << (int)x; // prints "4"
//      ^^^^^
printf("%d", (int)x);
printf("%d", y);
#include <boost/lexical_cast.hpp>


int main() {
    unsigned char x;
    double y = 4.6;
    x = boost::lexical_cast<unsigned char>((int)y);
    printf("%f", y);
    std::cout << std::endl << "the char of 4.6 is: " << x;
}