相关疑难解决方法(0)

什么是unsigned char?

在C/C++中,unsigned char用于什么?它与常规有什么不同char

c c++ char

456
推荐指数
13
解决办法
55万
查看次数

unsigned char 和 char 指针之间的区别

我对unsigned char(也在BYTEWinAPI 中)和char指针之间的差异感到有些困惑。

目前我正在处理一些基于 ATL 的遗留代码,我看到了很多如下所示的表达式:

CAtlArray<BYTE> rawContent;
CALL_THE_FUNCTION_WHICH_FILLS_RAW_CONTENT(rawContent);
return ArrayToUnicodeString(rawContent);
// or return ArrayToAnsiString(rawContent);
Run Code Online (Sandbox Code Playgroud)

现在,实现ArrayToXXString看起来如下:

CStringA ArrayToAnsiString(const CAtlArray<BYTE>& array)
{
    CAtlArray<BYTE> copiedArray;
    copiedArray.Copy(array);
    copiedArray.Add('\0');

    // Casting from BYTE* -> LPCSTR (const char*).
    return CStringA((LPCSTR)copiedArray.GetData());
}

CStringW ArrayToUnicodeString(const CAtlArray<BYTE>& array)
{
    CAtlArray<BYTE> copiedArray;
    copiedArray.Copy(array);

    copiedArray.Add('\0');
    copiedArray.Add('\0');

    // Same here.        
    return CStringW((LPCWSTR)copiedArray.GetData());
}
Run Code Online (Sandbox Code Playgroud)

所以,问题:

  • 对于所有可能的情况,从BYTE*LPCSTR( const char*)的 C 样式转换是否安全?

  • 将数组数据转换为宽字符串时是否真的需要添加空终止?

  • 转换例程CStringW((LPCWSTR)copiedArray.GetData())对我来说似乎无效,是真的吗?

  • 有什么方法可以使所有这些代码更容易理解和维护?

c++ byte atl char unsigned-char

5
推荐指数
1
解决办法
3230
查看次数

为什么短*而不是char*为字符串?char*和unsigned char*之间的区别?

正如标题所说,我有两个问题.

编辑:为了澄清,他们实际上char并没有使用和short,他们确保它们是特定typedef的8位和16位.那么实际类型称为UInt8UInt16.

1.问题

iTunes的SDK使用unsigned short*其中一个字符串是必要的.使用它而不是char*/ unsigned char*?有什么好处?如何将其转换为char*,以及使用此类型时有何不同?

2.问题

我只看到char*必须存储字符串的时候.我什么时候应该使用unsigned char*,或者它没有任何区别?

c unsigned short char character-encoding

0
推荐指数
1
解决办法
1101
查看次数

标签 统计

char ×3

c ×2

c++ ×2

atl ×1

byte ×1

character-encoding ×1

short ×1

unsigned ×1

unsigned-char ×1