如何将 DWORD 和 LPBYTE 解析为 std::string
Howto parse DWORD and LPBYTE to std::string
我正在编写一些代码,这些代码将使用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);
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 重载 + 自己的类和 std::string 的运算符
- 如何使用 std::string 作为 QHash 的键?
- 将日语 wstring 转换为 std::string
- 可以从std::string继承以提供类型一致性吗
- 构造函数采用std::string_view与std::string并移动
- 在共享缓冲区内存中创建 ::std::string 对象
- std::string.size() 未知行为
- Valgrind 在 std::string::swap 中报告 SIGILL