我有一个很长的号码,我想编码:
例如。 421400434911950871535
我想做的是以各种编码来表示,例如。 Base64,ASCII85或Base32。
为了做到这一点,我想我可能需要根据std.base64的API将它变成ubyte[]
。我无法解决如何做到这一点。我可以将它变为十六进制字符串,如下所示:
import std.stdio;
import std.bigint;
import std.conv;
void main() {
BigInt bignumber = ("421400434911950871535");
string hexstr;
bignumber.toString(delegate (foo){hexstr = to!string(foo); }, "%X");
writeln(hexstr);
;}
哪个给了我
"16_D81B16E0_91F31BEF".
我想做的是将其变成ubyte[]
,如下所示:
[16, D8, 1B, 16, E0, 91, F3, 1B, EF]
有简单的方法吗?
答案 0 :(得分:2)
目前为止的最佳答案,thanks to 'Anonymous' on the D forums:
import std.conv: parse;
import std.array: array;
import std.range: chunks;
import std.algorithm: map;
auto hexstr = "16D81B16E091F31BEF";
ubyte[] bytes = (hexstr.length % 2 ? "0" ~ hexstr : hexstr)
.chunks(2)
.map!(twoDigits => twoDigits.parse!ubyte(16))
.array();