unsigned char*
がありますが、それをstd::string
に変換します。これを行う最も安全な方法を教えてください。
文字列クラスにはunsigned charを受け入れるコンストラクタがないため、unsigned charをcharにキャストする必要がありました。
unsigned char* uc;
std::string s( reinterpret_cast< char const* >(uc) ) ;
ただし、バイト配列にnullが含まれている場合は、配列の一部だけが文字列(最初のnullまでの配列)にならないように、コンストラクタでlength引数を使用する必要があります
size_t len;
unsigned char* uc;
std::string s( reinterpret_cast<char const*>(uc), len ) ;
BYTE*
はおそらくunsigned char*
のtypedefですが、確かに言うことはできません。 BYTE
とは何かを教えていただければ助かります。
BYTE *がunsigned char *の場合、std :: string範囲コンストラクターを使用してstd :: stringに変換できます。これは2つの汎用イテレーターを取ります。
const BYTE* str1 = reinterpret_cast<const BYTE*> ("Hello World");
int len = strlen(reinterpret_cast<const char*>(str1));
std::string str2(str1, str1 + len);
そうは言っても、これはいい考えだと思いますか? BYTE
がunsigned char
の場合、非ASCII文字が含まれる場合があり、NULLを含めることができます。これにより、strlen
の長さが正しくなくなります。
BYTE *str1 = "Hello World";
std::string str2((char *)str1); /* construct on the stack */
代わりに:
std::string *str3 = new std::string((char *)str1); /* construct on the heap */
cout << &str3;
delete str3;
BYTEはtypedef unsigned char BYTE;
に他なりません
以下のコンストラクタを簡単に使用できます
string ( const char * s, size_t n );
string ( const char * s );
CryptoPPにアクセスできる場合
読み取り可能な16進文字列から符号なし文字へ
std::string& hexed = "C23412341324AB";
uint8_t buffer[64] = {0};
StringSource ssk(hexed, true,
new HexDecoder(new ArraySink(buffer,sizeof(buffer))));
帰ってきた
std::string hexed;
uint8_t val[32] = {0};
StringSource ss(val, sizeof(val), true,new HexEncoder(new StringSink(hexed));
// val == buffer