将十六进制字符值转换为字符串文字,以便在sstream上使用 < >我需要用C++来打印字符变量的精确十六进制值。
这是我的密码:将十六进制字符值转换为字符串文字,以便在sstream上使用 < >我需要用C++来打印字符变量的精确十六进制值。,c++,C++,这是我的密码: #include <iostream> #include <string> #include <memory> #include <sstream> #include <iomanip> int main() { char val = 0xfe; std::stringstream ss1; std::stringstream ss2; ss1 << "#645" <
#include <iostream>
#include <string>
#include <memory>
#include <sstream>
#include <iomanip>
int main()
{
char val = 0xfe;
std::stringstream ss1;
std::stringstream ss2;
ss1 << "#645" << std::setfill('0') << std::setw(2) << std::hex << val;
ss2 << "#645" << std::setfill('0') << std::setw(2) << std::hex << (int) val;
std::cout << ss1.str() << std::endl;
std::cout << ss2.str() << std::endl;
}
我所期望的是:
#645FE
快速修复:
unsigned char val = 0xfe;
...
ss2 << "#645" << std::setfill('0') << std::setw(2) << std::hex << std::uppercase <<
(int) val;
无符号字符val=0xfe;
...
ss2如果自己更容易(利用到无符号字符的隐式转换),我就不必为流操纵器操心了
用法:
std::cout<<hexb(val);
std::coutt这里有一些相同问题的解决方案:这是我从中获得第一个代码的地方,但它适用于sergej指出的unsigned char
,而不是char
。@Mendez:static_cast(static_cast,val))
Kerrek,casting解决了这个问题,但没有将类型更改为unsigned
ss2 << "#645" << std::setfill('0') << std::setw(2) << std::hex << std::uppercase <<
static_cast<unsigned int>(static_cast<unsigned char>(val));
std::string hexb(unsigned char b) {
const char *s="0123456789ABCDEF";
return std::string(s[b>>4]) + s[b&0xf];
}
std::cout<<hexb(val);