如何将BigInt转换为ubyte []?

时间:2014-05-18 18:07:04

标签: d

我有一个很长的号码,我想编码:

例如。 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]

有简单的方法吗?

1 个答案:

答案 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();