在c++中创建和显示十六进制字符串
create and display hexadecimal string in c++
我已经阅读了许多关于同一主题的建议,并尝试实现其中的许多建议,但似乎没有一个在我的环境中真正起作用。我使用的是QT 5,但我认为问题与QT无关,而是与语言如何解释十六进制字符0x00有关。我要实现的是将无符号字符流显示为十六进制值,例如:
输入字节:0x00 0x4E 0x01 0x00 0x17 0x00
显示为:0x00:0x4E:0x01:0x00:0x17:0x00
这看起来很容易,但我得到的只是一根空绳子。。。
我写的函数:
QString getBufferAsHexStr(const unsigned char* buf, int buffsize) {
std::string finalstring("");
char tempbuff[5];
int n=0, index=0;
for (int c = 0; c < buffsize; c++) {
if(c == buffsize-1) {
n=sprintf(tempbuff, "0x%02X", buf[c]);
} else {
n=sprintf(tempbuff, "0x%02X:", buf[c]);
}
finalstring.append(tempbuff, n);
index += n;
}
QString resultStr(finalstring.c_str());
return resultStr;
}
QString getBufferAsHexStr(const unsigned char* buf, int buffsize) {
std::stringstream ss;
for (int c = 0; c < buffsize; c++) {
if(c == buffsize-1) {
ss << std::hex << std::showbase << buf[c];
} else {
ss << std::hex << std::showbase << buf[c] << ":";
}
}
const std::string finalstring = ss.str();
QString resultStr(finalstring.c_str());
return resultStr;
}
我不知道为什么在有更好的替代方案QString
的情况下,开始将C++函数与C++类型一起使用。使用QString
,您可以按如下方式实现它:
QString getBufferAsHexStr(const unsigned char* buf, int buffsize) {
QString result;
for(int i = 0; i < buffsize; ++i)
result += "0x" + QString("%1:").arg(buf[i], 2, 16, QChar('0')).toUpper();
result.chop(1);
return result;
}
使用QByteArray
和连接的QStringList
:的另一个版本
QString getBufferAsHexStr(QByteArray buf) {
QStringList byteStrings;
for (int i = 0; i < buf.size(); ++i)
byteStrings += QString("0x") + QString("%1").arg(buf[i], 2, 16, QChar('0')).toUpper();
return byteStrings.join(":");
}
它将使用调用
QString result = getBufferAsHexStr(QByteArray(charArr, charArrSize));
相关文章:
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 'cout'将整数显示为十六进制
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 当Cppunit断言失败时,如何显示十六进制值
- 在c++中创建和显示十六进制字符串
- 如何附加到相邻的十六进制值,然后显示
- 如何在单个块中显示十六进制值
- 如何在不显示十六进制的情况下读取dat文件中的文本?C++
- C++.将二进制文件读入缓冲区后,如何以十六进制显示缓冲区
- 为什么该函数以相反的顺序显示十六进制代码
- GDB:显示函数将我的 {type} 的地址打印为整数——想改成十六进制
- 如何获取显示字节十六进制值的字符串
- 在消息中显示每个字符的十六进制
- 为什么无符号字符不能正确显示十六进制值
- 如何用十六进制而不是ASCII符号显示实际值?
- 使用哪个小部件将硬盘扇区显示为十六进制
- 我怎么能阻止我的整数显示为十六进制
- 十六进制转储实用程序c++显示十六进制和Ascii
- 如何比较"4A4B4C"(字符串显示十六进制值)实际字符串"JKL"