From dd6422c56fbd251976691b13ea0796db0cda4e85 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 30 Nov 2015 19:57:59 +0200 Subject: [PATCH] Optimized hexbyte2int --- bytesconv.go | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/bytesconv.go b/bytesconv.go index a956247..6d8326a 100644 --- a/bytesconv.go +++ b/bytesconv.go @@ -195,17 +195,24 @@ func hexCharUpper(c byte) byte { return c - 10 + 'A' } +var hex2intTable = func() []byte { + b := make([]byte, 255) + for i := byte(0); i < 255; i++ { + c := byte(0) + if i >= '0' && i <= '9' { + c = 1 + i - '0' + } else if i >= 'a' && i <= 'f' { + c = 1 + i - 'a' + 10 + } else if i >= 'A' && i <= 'F' { + c = 1 + i - 'A' + 10 + } + b[i] = c + } + return b +}() + func hexbyte2int(c byte) int { - if c >= '0' && c <= '9' { - return int(c - '0') - } - if c >= 'a' && c <= 'f' { - return int(c - 'a' + 10) - } - if c >= 'A' && c <= 'F' { - return int(c - 'A' + 10) - } - return -1 + return int(hex2intTable[c]) - 1 } const toLower = 'a' - 'A'