【问题标题】:How to convert CString to byte [] array? [duplicate]如何将 CString 转换为 byte [] 数组? [复制]
【发布时间】:2019-02-09 02:43:49
【问题描述】:

我正在尝试在 Visual Studio MFC 中将 CString 转换为 byte [] 数组。请看下面的代码。

CString str_text;
GetDlgItemText(IDC_KEY_TEXT, str_text);
  1. BYTE A[] = "hi I love stackoverflow";
  2. BYTE A[] = str_text;

这里,BYTE A [] 是一个字节数组。

不管CStringGetDlgItemText 功能如何,如果我只做 (1) 我的程序运行良好。 但是,如果您键入 CString(str_text)(2) 而不是“嗨,我爱 stackoverflow”,我就会出错。那是错误是“它无法将 CString 转换为字节数组”。 我想将CString 转换为字节数组。请告诉我我的错误在哪里。

【问题讨论】:

  • 您可以获得指向CString 包裹的字符串的指针(参见例如GetString)。因此,您很少需要将字符串复制到自己的数组中。
  • 你检查过这个链接吗? stackoverflow.com/questions/12356815/…
  • 可能是XY Problem。为什么你需要一个BYTE 数组?除此之外,您只能省略数组大小,如果编译器可以在编译时推断出大小(就像从字符串文字构造它时的情况一样)。我们也不知道,CString 适合你。可能是CStringACStringW。如果是前者,您已经通过调用CString::GetString() 获得了一个char 数组。如果是后者,则说明您的规范不明确。您还必须指定所需的字节序类型。
  • @swo:这不是重复的。链接的问答询问类型转换。这个问答(大概)是在问,如何创建一个副本并将其存储在BYTE 数组中。
  • 非常感谢您的回答。我会努力做到的。

标签: c++ arrays mfc type-conversion


【解决方案1】:

这是执行此操作的正确方法。我假设您处理 Unicode 字符串:

CStringW str = L"Hello World";
// convert to UTF-8
CStringA utf8 = CW2A(str, CP_UTF8);
CByteArray Bytes;   
const size_t nBytes = sizeof(CStringA::XCHAR) * utf8.GetLength();
Bytes.SetSize( nBytes );
std::memcpy( Bytes.GetData(), static_cast<BYTE const*>utf8, nBytes );

【讨论】:

  • 这是一个潜在的解决方案。然而,问题中没有任何内容是询问将字符串转换为 UTF-8 的问题。此外,sizeof(CStringA::XCHAR)始终为 1。省略它可以简化代码,并且不会引起任何干扰。此外,(const BYTE*)(LPCSTR) 应该是 static_cast&lt;BYTE const*&gt;(utf8.GetString())。不需要所有那些 C 风格的演员表。
  • @llnspectable 我同意 C 风格的演员表。我提供了扩展示例,仅用于教育目的。
  • 非常感谢您的详细回答。我一定会努力做到的。
猜你喜欢
  • 1970-01-01
  • 2011-04-12
  • 2012-03-19
  • 1970-01-01
  • 2016-04-16
  • 2012-04-11
  • 2012-09-03
  • 2016-03-17
  • 1970-01-01
相关资源
最近更新 更多