如何将 CString 转换为 CByteArray?

Posted

技术标签:

【中文标题】如何将 CString 转换为 CByteArray?【英文标题】:How to convert CString to CByteArray? 【发布时间】:2013-03-18 11:09:53 【问题描述】:

我知道将CByteArray 转换为CString 非常简单。但是我该如何反其道而行之——从CStringCByteArray

【问题讨论】:

【参考方案1】:

CString 类的GetBuffer() 方法返回你需要的数组。之后,您可以使用 memcpy 或其他类似函数将其复制到 CByteArray 对象。

CString csData = L"someData";
CByteArray byteArr;

BYTE *pByteArray = (PBYTE)(LPCTSTR)csData.GetBuffer();
byteArr.SetSize(csData.GetLength());

memcpy(byteArr.GetData(), pByteArray, csData.GetLength());

【讨论】:

【参考方案2】:

您需要考虑到,CString 中的 1 个字符通常不是 1 个字节。

const size_t noBytes = sizeof(CString::XCHAR) * myString.GetLength();
byteArray.SetSize( noBytes );
std::memcpy( 
    byteArray.GetData(),
    reinterpret_cast<BYTE*>(myString.GetBuffer()), 
    noBytes );

所以你需要考虑这是否真的是预期的行为。

【讨论】:

以上是关于如何将 CString 转换为 CByteArray?的主要内容,如果未能解决你的问题,请参考以下文章

如何将char数组转换为CString

mfc中,如何将CString 转换成 string

如何将 ATL/MFC CString 转换为 QString?

如何将CString转换为byte []数组? [重复]

如何将_bstr_t转换为CString

将 CString 转换为字符数组?