string to character code hex string
lithium iodate via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Sep 2 10:07:40 PDT 2017
On Saturday, 2 September 2017 at 16:52:17 UTC, Ali Çehreli wrote:
> On 09/02/2017 09:23 AM, bitwise wrote:
>> On Saturday, 2 September 2017 at 15:53:25 UTC, bitwise wrote:
>>> [...]
>>
>> This seems to work well enough.
>>
>> string toAsciiHex(string str)
>> {
>> import std.array : appender;
>>
>> auto ret = appender!string(null);
>> ret.reserve(str.length * 2);
>> foreach(c; str) ret.put(format!"%x"(c));
>> return ret.data;
>> }
>>
>
> Lazy version, which the user can easily generate a string from
> by appending .array:
>
> import std.stdio;
>
> auto hexString(R)(R input) {
> import std.conv : text;
> import std.string : format;
> import std.algorithm : map, joiner;
> return input.map!(c => format("%02x", c)).joiner;
> }
>
> void main() {
> writeln("AAA".hexString);
> }
>
> To generate string:
>
> import std.range : array;
> writeln("AAA".hexString.array);
>
> Ali
Please correct my if i'm wrong, but it think this has issues
regarding unicode.
"ö…" becomes "f62026", which, interpreted as UTF-8, is a control
character ~ " &", so you either need to add padding or use
.byCodeUnit so it becomes "c3b6e280a6" (correct UTF-8) instead.
More information about the Digitalmars-d-learn
mailing list