diff --git a/src/to_hex.zig b/src/to_hex.zig index d6c245a6fa8212582a2bf0f787308dc34b6487cc..51ed1eedd29ccfdf645b52b8484c4f44b06c1afa 100644 --- a/src/to_hex.zig +++ b/src/to_hex.zig @@ -2,11 +2,23 @@ const std = @import("std"); const string = []const u8; const extras = @import("./lib.zig"); const rawIntBytes = extras.rawIntBytes; +const digits = "0123456789abcdef"; + +const alphabet = blk: { + var data: [512]u8 = @splat('0'); + for (0..16) |m| { + for (0..16) |n| { + data[(m * 16 + n) * 2 + 0] = digits[m]; + data[(m * 16 + n) * 2 + 1] = digits[n]; + } + } + const result = data; + break :blk result; +}; pub fn to_hex(array: anytype) [array.len * 2]u8 { var res: [array.len * 2]u8 = undefined; - var fbs = std.io.fixedBufferStream(&res); - std.fmt.format(fbs.writer(), "{x}", .{std.fmt.fmtSliceHexLower(&array)}) catch unreachable; + for (&array, 0..) |x, i| res[i * 2 ..][0..2].* = alphabet[@as(usize, x) * 2 ..][0..2].*; return res; }