我正在编写一些代码,这些代码将使用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
有一个构造函数可以传递长度,但我没有设法让它工作。
有谁知道如何解决这个问题?
答案 0 :(得分:1)
根据MSDN,LPBYTE
只是BYTE*
:
此类型在WinDef.h中声明如下:
typedef BYTE far *LPBYTE;
现在,BYTE
本身只是一个无符号的char指针:
此类型在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);
答案 1 :(得分:1)
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);
}