2014-05-18 3 views
2

길이가 길어 인코딩하려고합니다 :BigInt를 ubyte []로 변환하려면 어떻게해야합니까?

예 : 421400434911950871535

내가하고 싶은 것은 다양한 인코딩으로 표현하는 것입니다. Base64, ASCII85 또는 Base32.

이렇게하려면 아마도 std.base64 API를 기반으로 ubyte[]에 입력해야한다고 생각합니다. 나는 그것을하는 방법을 연습하는 데 어려움을 겪고 있습니다.

[16, D8, 1B, 16, E0, 91, F3, 1B, EF] 
: 나에게주는

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 진수 문자열로 얻을 수 있습니다

간단한 방법이 있나요? 지금까지

+0

아악, 그것은 쉬운 것입니다! 편집 :하지만 ... 그리고 소스를 수정하는 것 외에도, 나는 그것에 얻을 어떤 방법을 볼 수 없어 : ( –

+0

내가 정말로 원하는 것은 node.js가하는 일이다 : 새로운 버퍼 ("250001000192CD0000002F6D6E742F72", "hex") :) – Darren

답변

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(); 
+0

2의 배수가 아닌 문자열을 처리하기 위해 약간 편집 됨 – Darren

관련 문제