如何将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变量

关于unsigned char 型数据转换成十进制或者16进制的问题

将 unsigned char* 转换为可读字符串 & 这个函数在做啥

C++怎么将 CString 转换成 unsigned char 的数组

如何将std :: string复制到unsigned char数组?

关于char型与unsigned char型数据使用格式化输出注意点