#include <iostream>
#include <sstream>
using namespace std;
int main() {
// <variables>
int t = 0b11011101;
stringstream aa;
int n;
string hexed;
int hexedNot;
// </variables>
aa << t;
aa >> n;
cout << n << endl; // output 221
aa.clear();
aa << hex << n;
aa >> hexed;
aa.clear();
aa << hex << n;
aa >> hexedNot;
cout << hexed << endl; // output dd
cout << hexedNot; // output 221
return 2137;
}
我想使用stringstream将int小数转换为hex / oct / bin整数,但我不知道如何正确处理它。如果我尝试将其转换为包含十六进制的字符串,那很好,但是当我尝试用整数做同样的事情时,它就不起作用了。有任何想法吗?我不能使用c ++ 11,我希望以一种非常简单的方式来实现它。
我知道我可以使用cout << hex << something;
,但这只会改变我的输出,并且不会将渐变的值写入我的变量。
答案 0 :(得分:1)
从std::string hexed;
读取了std::stream
,您在向流注入n
的十六进制表示后阅读了该文件:
aa << hex << n;
下一步操作
aa >> hexed;
从流中读取std::string
变量。因此
cout << hexed << endl; // output dd
你似乎有一个很大的误解:
我知道我可以使用
cout << hex << something;
,但这只会改变我的输出并且它不会写 hexified < / strong> 值到我的变量。
在c ++或任何其他编程语言中,没有像&#34; hexified value&#34; 这样的东西。只有(整数)值。
整数是整数,它们在输入/输出中的表示是一个不同的鱼:
它没有直接绑定到它们的变量类型或它们初始化的表示形式,而是指示std::istream
/ std::ostream
要做什么。
要在终端上打印221
的十六进制表示,只需写入
cout << hex << hexedNot;
至于你的评论:
但我希望有一个变量int X = 0xDD或int X = 0b11011101(如果可能的话)。如果没有,我将继续使用cout&lt;&lt; hex&lt;&lt;某事物;就像我一直有的那样。
当然这些都是可能的。你应该尝试
,而不是坚持他们的文字表示int hexValue = 0xDD;
int binValue = 0b11011101;
if(hexValue == binValue) {
cout << "Wow, 0xDD and 0b11011101 represent the same int value!" << endl;
}
答案 1 :(得分:0)
整数(与所有其他值一样)在计算机内存中存储为二进制(“内容”)。 cout
是以二进制,十六进制还是十进制打印,只是格式化事物(“表示”)。 0b11011101
,0xdd
和221
只是相同号码的表示。
C ++或我所知的任何其他语言都不会存储带有整数变量的格式信息。但是你可以随时创建自己的类型:
// The type of std::dec, std::hex, std::oct:
using FormattingType = std::ios_base&(&)(std::ios_base&);
class IntWithRepresentation {
public:
IntWithRepresentation(int value, FormattingType formatting)
: value(value), formatting(formatting) {}
int value;
FormattingType formatting;
};
// Overload std::cout <<
std::ostream& operator<<(std::ostream& output_stream, IntWithRepresentation const& i) {
output_stream << i.formatting << i.value;
return output_stream;
}
int main() {
IntWithRepresentation dec = {221, std::dec};
IntWithRepresentation hex = {0xdd, std::hex};
IntWithRepresentation oct = {221, std::oct};
std::cout << dec << std::endl;
std::cout << hex << std::endl;
std::cout << oct << std::endl;
}