1

我搜索了很多以了解如何将我的 unsigned char* 转换为可打印的十六进制字符串。到目前为止,我稍微了解了它是如何工作的以及有符号和无符号字符之间的区别。

你能告诉我我找到的这个功能是做什么的吗?并帮助我开发一个将 unsigned char*(这是一个散列字符串)转换为可打印字符串的函数?

以下函数是否执行此操作:
- 它遍历 char 数组字符串的每个第二个字符
- 在每个循环中,它读取位置 string[x] 处的 char,将其转换为无符号数(精度为 2 位小数)然后将转换后的 char(number?) 复制到变量 uChar。
- 最后它将 unsigned char uChar 存储在十六进制字符串中

void AppManager :: stringToHex( unsigned char* hexString, char* string, int stringLength ) 
{     
    // Post:

    unsigned char uChar = 0;           

    for ( int x = 0; x<stringLength; x+=2 )     
    {         
        sscanf_s(&string[x], "%02x", &uChar);         
        hexString[x] = uChar;     
    } 

} 

所以我猜这意味着它将字符串中的字符转换为无符号(&2dcp)以确保它可以正确存储十六进制字符串。为什么要保留 2 个小数位,& 不会从有符号(如果该字符有符号)到无符号的简单转换导致完全不同的字符串?

如果我有一个 unsigned char* 我怎么能把它转换成可以让我在屏幕上打印出来的东西?

4

1 回答 1

2

这些不是小数位,它们是数字。您是在说“不要给我一个短于 2 的字符串;如果它短于 2 位数字,则用零填充它。”

这样一来,如果您有一个十六进制序列0x0A,它实际上会打印0A,而不仅仅是A.

此外,这里没有有符号/无符号转换。十六进制字符串是十六进制字符串 - 它们没有符号。它们是数据的二进制表示,根据它们的解释方式,它们可能被读取为二进制补码有符号整数、无符号整数、字符串或其他任何内容。

于 2011-10-03T01:34:58.820 回答