| ... | ... | @@ -350,7 +350,7 @@ pub fn formatText( |
| 350 | 350 | comptime var width = 0; |
| 351 | 351 | if (fmt.len > 1) width = comptime (parseUnsigned(usize, fmt[1..], 10) catch unreachable); |
| 352 | 352 | return formatBuf(bytes, width, context, Errors, output); |
| 353 | | } else if ((fmt[0] == 'x') or (fmt[0] == 'X') ) { |
| 353 | } else if ((fmt[0] == 'x') or (fmt[0] == 'X')) { |
| 354 | 354 | for (bytes) |c| { |
| 355 | 355 | try formatInt(c, 16, fmt[0] == 'X', 2, context, Errors, output); |
| 356 | 356 | } |
| ... | ... | @@ -1331,3 +1331,22 @@ pub fn isWhiteSpace(byte: u8) bool { |
| 1331 | 1331 | else => false, |
| 1332 | 1332 | }; |
| 1333 | 1333 | } |
| 1334 | |
| 1335 | pub fn hexToBytes(out: []u8, input: []const u8) !void { |
| 1336 | if (out.len * 2 < input.len) |
| 1337 | return error.InvalidLength; |
| 1338 | |
| 1339 | var in_i: usize = 0; |
| 1340 | while (in_i != input.len) : (in_i += 2) { |
| 1341 | const hi = try charToDigit(input[in_i], 16); |
| 1342 | const lo = try charToDigit(input[in_i + 1], 16); |
| 1343 | out[in_i / 2] = (hi << 4) | lo; |
| 1344 | } |
| 1345 | } |
| 1346 | |
| 1347 | test "fmt.hexToBytes" { |
| 1348 | const test_hex_str = "909A312BB12ED1F819B3521AC4C1E896F2160507FFC1C8381E3B07BB16BD1706"; |
| 1349 | var pb: [32]u8 = undefined; |
| 1350 | try hexToBytes(pb[0..], test_hex_str); |
| 1351 | try testFmt(test_hex_str, "{X}", pb); |
| 1352 | } |