如何将unsigned char数组以十六进制形式显示在CListBox控件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将unsigned char数组以十六进制形式显示在CListBox控件中相关的知识,希望对你有一定的参考价值。
CListBox* pList = (CListBox*)GetDlgItem(YOUR_LIST_ID); // 获取你的CListBox对象
// 指针,YOUR_LIST_ID为你的列表框资源ID
pList->ResetContent(); // 清空ListBox原有内容
unsigned char uch[] = 188, 199, 200, 204; // 任意个元素的usigned char数组
const int nSize = sizeof(uch) / sizeof(uch[0]); // 获取数组元素个数
char pBuff[5]; // 字符串缓存
for(int i = 0; i < nSize; i++)
sprintf(pBuff, "%x", uch[i]); // 将usgined char数组元素转换为16进制值,并以字符串形式装入缓存
pList->AddString(pBuff); //添加到ListBox列表中
另外请注意:ListBox一般会按字母顺序给你排序后显示
本列中显示结果为:(相信这就是你想要的)
参考技术A int len = 0;CHAR szBuf[1024*10] = "";
CHAR szText[20] = "";
if(bufLen>10000) bufLen = 10000;
for(int i=0;i<bufLen;i++)
if(i%16 == 0 && i!=0)
szBuf[len++] = '\t';
strcat(szBuf,szText);
len+=strlen(szText);
szBuf[len++] = '\r';
szBuf[len++] = '\n';
static char* HexChar = "0123456789ABCDEF";
BYTE b = (BYTE)(*(buf+i));
szBuf[len++] = HexChar[b>>4];
szBuf[len++] = HexChar[b&0x0F];
szBuf[len++] = ' ';
如何将 unsigned char 值表示为十六进制字符串?
【中文标题】如何将 unsigned char 值表示为十六进制字符串?【英文标题】:How to represent unsigned char values as hexadecimal string? 【发布时间】:2016-03-15 16:44:45 【问题描述】:我想将无符号字符数组内容转换为十六进制字符串表示形式。 任何人都可以提供功能或出路吗?
unsigned char codeslink[5] = 0x33, 0x74, 0x74, 0x73, 0x72;
std::string my_std_string(reinterpret_cast<const char *>(codeslink), 5);
std::string my_std_string((const char *)codeslinks);
我想得到一个返回值3374747372
作为字符或字符串。
更新:
这是我使用@πάνταῥεῖ:
提出的功能答案我想让它变得更好,并使其能够处理unsigned char
,如各种长度大小的0x00,0x04,0x00,0x11
。
std::string Return_Uchar_To_String(unsigned char uns_char, size_t uns_char_len)
std::ostringstream oss;
oss << std::hex << std::setw(2) << std::setfill('0');
for(size_t i = 0; i < uns_char_len; ++i)
oss << (unsigned int)uns_char[i];
return oss.str();
【问题讨论】:
std::string my_std_string = std::to_string(3374747372);
?
这不是通过强制转换完成的。
这行不通:0x33 != "33"
。否则,这是一个副本:***.com/questions/4691608/…
@R_Kapp std::string my_std_string = std::to_string(codeslink);
不明白你的意思? @πάντα ῥεῖ 如何做到最好? @NatanOliver 对我也不起作用
@R_Kapp 的评论是关于十六进制值的废话。
【参考方案1】:
我想得到一个返回值
3374747372
作为字符或字符串。
在这种情况下,投射不起作用。
您可以使用文本格式化 IO 来获取数组内容的十六进制字符串表示:
unsigned char codeslink[5] = 0x33, 0x74, 0x74, 0x73, 0x72;
std::ostringstream oss;
oss << std::hex << std::setfill('0');
for(size_t i = 0; i < 5; ++i)
oss << std::setw(2) << (unsigned int)codeslink[i];
std::string result = oss.str();
Live Demo
【讨论】:
感谢编辑帖子的标题,我发布了一个从它派生出来的函数,它可以灵活地适应各种 unsigned char 大小你能看看这个函数并帮助我将它重构为健壮吗? @DavidoLLP 你的函数签名似乎有一个小错误:std::string Return_Uchar_To_String(unsigned char uns_char, size_t uns_char_len)
应该是std::string Return_Uchar_To_String(const unsigned char* uns_char, size_t uns_char_len)
,否则它看起来没问题并且会健壮。
@ πάντα ῥεῖ 感谢更新我用这个值尝试了我的函数unsigned char codeslink[4] = 0x00, 0x00, 0x02, 0x11 ;
我得到了这个000211
而不是00000211
函数是` Return_Uchar_To_String(codeslink, sizeof(codeslink));`与unsigned char codeslink[4] = 0x10, 0x00, 0x02, 0x11 ;
之类的电话类似,有什么想法,这是一个错误吗?
@DavidoLLP 抱歉,我忘记了setw()
不粘在流上,只是改变了下一个输出字段的行为。
@πάντα ῥεῖ 没有冒犯,你有帮助谢谢以上是关于如何将unsigned char数组以十六进制形式显示在CListBox控件中的主要内容,如果未能解决你的问题,请参考以下文章
关于unsigned char 型数据转换成十进制或者16进制的问题
将 unsigned char* 转换为可读字符串 & 这个函数在做啥
C++怎么将 CString 转换成 unsigned char 的数组