2017-01-10 4 views
2

私はC++でのLDAPを使用してActive Directoryから読み取りますいくつかのコードを書いています。 私が得る構造体の1つは、AD_OCTET_STRINGです。これは、8ビットのバイトで表される文字列です。ハウツー先はstd DWORDとLPBYTEを解析::文字列

構造体は次のようになります

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

dwLengthはバイトポインタである第二の値の長さです。 これを正しく解析するには、長さをdwLengthにする必要があります。私が知っているbasic_string

あなたは長さを渡すことができますコンストラクタを持っていますが、私はこの作業を取得するために管理していませんでした。 この問題に対処する方法を知っている人は誰ですか?

答えて

1

STDと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); 
} 
1

単にBYTE*あるMSDNLPBYTEによれば、以下のように、このタイプはWinDef.hで宣言され

typedef BYTE far *LPBYTE;

を、​​自体は単純ですunsigned 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);