我正在编写一些代码,这些代码将使用C++中的LDAP从读取。我得到的结构之一是AD_OCTET_STRING
,它是一个由8位字节表示的字符串。
结构看起来如下:
typedef struct __MIDL___MIDL_itf_ads_0000_0000_0002
{
DWORD dwLength;
LPBYTE lpValue;
ADS_OCTET_STRING;
}
dwLength
是第二个值的长度,它是一个字节指针.现在,我需要使用dwLength
中的长度来正确地解析它。
我知道basic_string
有一个构造函数,您可以在这里传递长度,但我没能做到这一点。谁知道如何解决这个问题?
发布于 2017-01-10 11:36:08
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);
}
发布于 2017-01-10 10:26:21
根据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 *
。知道了所有这些之后,您最终可以用
string(reinterpret_cast<char const *>(your_struct.lpValue), your_struct.dwLength);
https://stackoverflow.com/questions/41566359
复制相似问题