首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将DWORD和LPBYTE解析为std::string

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

Stack Overflow用户
提问于 2017-01-10 10:15:14
回答 2查看 1.2K关注 0票数 2

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

结构看起来如下:

代码语言:javascript
运行
复制
typedef struct __MIDL___MIDL_itf_ads_0000_0000_0002
{
    DWORD dwLength;
    LPBYTE lpValue;
    ADS_OCTET_STRING;
}   

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

我知道basic_string有一个构造函数,您可以在这里传递长度,但我没能做到这一点。谁知道如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-10 11:36:08

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

代码语言:javascript
运行
复制
#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);
}
票数 1
EN

Stack Overflow用户

发布于 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 *。知道了所有这些之后,您最终可以用

代码语言:javascript
运行
复制
string(reinterpret_cast<char const *>(your_struct.lpValue), your_struct.dwLength);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41566359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档