将十六进制字符值转换为其字符串文本以在流上使用
Convert a hexadecimal char value to its string literal to use on sstream
我需要使用 C++ 打印 char 变量的确切十六进制值。
这是我的代码:
#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;
}
我的输出:
#6450�
#645fffffffe
以及我所期望的:
#645FE
快速修复:
unsigned char val = 0xfe;
...
ss2 << "#645" << std::setfill('0') << std::setw(2) << std::hex << std::uppercase <<
(int) val;
或(根据@Kerrek SB的建议(:
ss2 << "#645" << std::setfill('0') << std::setw(2) << std::hex << std::uppercase <<
static_cast<unsigned int>(static_cast<unsigned char>(val));
请注意,如果(在您的平台上(char
默认为 signed char
,则 0xfe
是负数 (-2(。
换句话说,如果char
是signed char
,sizeof(int)
是 4,则 (int)val
0xfffffffe
.这就是你得到的。
- -2 如
signed char
:0xfe
- -2 作为
int
:0xfffffffe
当自己做更容易时,我不会打扰流操纵器(利用隐式转换为无符号字符(。
std::string hexb(unsigned char b) {
const char *s="0123456789ABCDEF";
return std::string(s[b>>4]) + s[b&0xf];
}
用法:
std::cout<<hexb(val);
相关文章:
- 在 C++ 中从 8 位 ASCII 字符创建 7 位 ASCII 文本字符串
- cin>>gender 和 cin>>*gender ( c 样式文本字符串)有什么区别
- 是否可以动态检查文本字符串是否是 C++ 中给定类的成员?
- 用Zlib解压缩文本字符串
- 将文本字符串作为常量字符 * 参数传递会导致代码分析器错误
- 来自文本字符串或某种其他机制的代码类自动生成器
- 函数读取最大和min int值,并用文本字符串返回
- 模板代码和文本字符串
- 声明具有常量引用与常量变量的常量文本字符串
- 加密给定的文本字符串-Caesar Cipher
- 如何使用键盘输入和sf ::文本在SFML中添加一种文本框以显示文本字符串
- 在C++代码中,如何让用户在2个文本字符串之间输入一个数字
- 如何将文本从一个文件复制到另一个文件,然后将文本字符串的第一个字母转换为大写
- 从文本字符串推断类型
- 跟踪内存中的文本字符串
- 将字符串变量与整数和文本字符串连接起来的 C++ 字符串流
- 将 char 数组分配给文本字符串 - C++
- 如何修复将文本字符串附加到 C 字符串的错误
- 使用C++读取不同长度的多个文本字符串
- 在C++中创建原始文本字符串,类似于 C# 的"@ string"