algorithm - 解码十六进制数字的最快方法

标签 algorithm hex

我正在寻找最快的方法来获取十六进制 ASCII 字符的十进制值,即保证出现在以下字符串中的字符(可以是小写或大写,但不能有空格):

0123456789ABCDEFabcdef

到目前为止,我想出的最好的公式是:

char c = 'd';  // or any other hex character
int value = (((c & 0x1F) + 9) % 25;

请注意,它是无分支的,但它确实包含一个昂贵的模运算。

我可以做得更好吗?

最佳答案

您可以在没有模数和分支的情况下完成它,只需几个移位和减法。

int value = (c & 0x0F) + 9 - ((c&0x10)>>1) - ((c&0x10)>>4);

我刚刚从你的公式开始,并使用了这样一个事实,即 c&0x10 对于字母将是 0 而对于 0- 将是 0x10 9

请注意,正如评论中指出的那样,编译器会针对乘法和加法优化常量模数,但这应该会稍微好一些,因为编译器没有 c 为十六进制数。

关于algorithm - 解码十六进制数字的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925589/

相关文章:

java - 如何知道一个字符串是否可以分割成两个字符串

c++ - c++ 枚举的底层类型是什么?

c++ - 错误 C2064 : term does not evaluate to a function taking 3 arguments

iphone - 如何制作具有 X-Y 比例的图形以容纳一组 2D 点?

algorithm - 树相关问题的时间复杂度

algorithm - CodeFight first重复面试挑战

algorithm - 最坏情况时间复杂度为 O(n) 的算法是否总是比最坏情况时间复杂度为 O(n^2) 的算法快?

c - 长十六进制 Linux 上的按位运算 C

css - 将调色板转换为另一种颜色

c# - 使用 C# 从十六进制转换为二进制而不丢失前导 0