我有一串十六进制字符串,我需要将其转换为const byte*
. 我正在使用 Crypto++ 进行散列,它需要密钥在const byte*
有什么方法可以将十六进制字符串转换为const byte*
使用任何 Crypto++ 库,或者我必须想出我自己的库吗?
问问题
4541 次
3 回答
6
Crypto++ 中有一个HexDecoder
类。
你需要喂这个角色。看来 Crypto++ 并没有直接区分字符和字节。因此 varren 提供的以下代码行将起作用:
string destination;
StringSource ss(source, true, new HexDecoder(new StringSink(destination)));
const byte* result = (const byte*) destination.data();
于 2013-07-23T18:44:48.910 回答
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));
(评论)但它将是字符串。我需要它以字节为单位*
这更容易:
string encoded = "FFEEDDCCBBAA99887766554433221100";
string decoded;
StringSource ss(encoded, true /*pumpAll*/, new StringSink(decoded));
const byte* data = reinterpret_cast<const byte*>(decoded.data());
如果您想要非常量版本,请使用:
byte* ptr = reinterpret_cast<byte*>(&decoded[0]);
于 2015-05-02T21:55:04.337 回答
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)));
于 2020-12-05T10:49:19.743 回答