将unsigned char *转换为可读字符串&这个功能是做什么的

时间:2011-10-03 01:31:04

标签: c++ unsigned-char

我已经google了很多,以学习如何将我的unsigned char *转换为可打印的十六进制字符串。到目前为止,我稍微了解它是如何工作的&签名&之间的区别未签名的字符。

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

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

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;     
    } 

} 

所以我猜这意味着它将字符串中的字符转换为unsigned(&amp; 2dcp)以确保它可以正确存储hexstring。为什么到2位小数,&amp;不会从signed(如果该字符被签名)到完全不同的字符串中的unsigned结果进行简单的转换?

如果我有一个未签名的字符*我怎样才能将其转换为可让我在屏幕上打印出来的内容?

1 个答案:

答案 0 :(得分:2)

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

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

此外,此处没有签名/未签名转换。十六进制字符串是十六进制字符串 - 它们没有符号。它们是数据的二进制表示,并且取决于它们如何被解释,可以被读作二进制补码有符号整数,无符号整数,字符串或其他任何东西。