如何将 DWORD 和 LPBYTE 解析为 std::string

Howto parse DWORD and LPBYTE to std::string

本文关键字:std string LPBYTE DWORD      更新时间:2023-10-16

我正在编写一些代码,这些代码将使用C++中的LDAP从Active Directory读取。我得到的结构之一是 AD_OCTET_STRING ,一个由 8 位字节表示的字符串。

结构如下所示:

typedef struct __MIDL___MIDL_itf_ads_0000_0000_0002
{
    DWORD dwLength;
    LPBYTE lpValue;
    ADS_OCTET_STRING;
}   

dwLength是第二个值的长度,它是一个 BYTE 指针。现在我需要使用 dwLength 中的长度来正确解析它。

我知道basic_string有一个构造函数,您可以在其中传递长度,但我没有设法让它工作。有谁知道如何解决这个问题?

std::string 可以使用任何一对迭代器初始化,其value_type可转换为字符串的字符类型。

#include <cstdint>
#include <string>
using LPBYTE = std::uint8_t *;
using DWORD = std::uint32_t;
struct temp
{
    DWORD dwLength;
    LPBYTE lpValue;
};
std::string to_string(const temp& source)
{
  return std::string(source.lpValue, source.lpValue + source.dwLength);
}
根据

MSDN,LPBYTE只是一个BYTE*

此类型在 WinDef.h 中声明如下:

typedef BYTE far *LPBYTE;

现在,BYTE本身只是一个无符号的字符指针:

此类型在 WinDef.h 中声明如下:

typedef unsigned char BYTE;

所以LPBYTE实际上是一个unsigned char *.但是,std::string没有接受unsigned char*的构造函数,因此您需要将其强制转换为char *。知道了这一切,你终于可以构建一个std::string

string(reinterpret_cast<char const *>(your_struct.lpValue), your_struct.dwLength);