我有十六进制字符串,我需要转换为const byte*
。我正在使用Crypto ++进行散列,它需要密钥在const byte*
我有什么办法可以使用任何Crypto ++库将十六进制字符串转换为const byte*
,或者我必须要出现我自己的?
答案 0 :(得分:5)
Crypto ++中有一个HexDecoder
类。
您需要提供此字符。似乎Crypto ++没有直接区分字符和字节。因此,varren提供的以下代码行将起作用:
StringSource ss(source, true, new HexEncoder(new StringSink(destination)));
const byte* result = (const byte*) destination.data();
答案 1 :(得分:1)
我有十六进制字符串,我需要转换为const字节*
中
...
但它会在字符串中。我需要它在byte *
您应该使用HexDecoder和ArraySink。类似的东西:
string encoded = "FFEEDDCCBBAA99887766554433221100";
ASSERT(encoded.length() % 2 == 0);
size_t length = encoded.length() / 2;
unique_ptr<byte[]> decoded(new byte[length]);
StringSource ss(encoded, true /*pumpAll*/, new ArraySink(decoded.get(), length));
然后,您可以将字节数组decoded.get()
用作byte*
。
您还可以使用vector<byte>
。在这种情况下,byte*
为&v[0]
。类似的东西:
string encoded = "FFEEDDCCBBAA99887766554433221100";
ASSERT(encoded.length() % 2 == 0);
size_t length = encoded.length() / 2;
vector<byte> decoded;
decoded.resize(length);
StringSource ss(encoded, true /*pumpAll*/, new ArraySink(&decoded[0], length));
(评论)但它会在字符串中。我需要它在byte *
中
这更容易:
string encoded = "FFEEDDCCBBAA99887766554433221100";
string decoded;
StringSource ss(encoded, true /*pumpAll*/, new StringSink(decoded));
const byte* data = reinterpret_cast<const byte*>(decoded.data());
如果你想要非const版本,那么使用:
byte* ptr = reinterpret_cast<byte*>(&decoded[0]);
答案 2 :(得分:0)
// HEX to BIN using CryptoPP
string encoded = "FFEEDDCCBBAA99887766554433221100";
size_t length = encoded.length() / 2;
vector<byte> decoded;
decoded.resize(length);
StringSource ss(encoded, true, new HexDecoder(new ArraySink(&decoded[0], length)));