如何将 ASCII HEX 字符转换为其值 (0-15)?
我正在编写一个字符串解析器,我想到可能有一些非常有趣的方法可以将 ASCII 十六进制字符 [0-9A-Fa-f]
转换为其数值。
将 [0-9A-Fa-f]
转换为 0
和 15
之间的值的最快、最短、最优雅或最晦涩的方法是什么代码>?
如果您愿意,可以假设该字符是有效的十六进制字符。
我没有机会,所以我会在最无聊的时候尝试一下。
( c <= '9' ) ? ( c - '0' ) : ( (c | '\x60') - 'a' + 10 )
I am writing a string parser and the thought occurred to me that there might be some really interesting ways to convert an ASCII hexadecimal character [0-9A-Fa-f]
to it's numeric value.
What are the quickest, shortest, most elegant or most obscure ways to convert [0-9A-Fa-f]
to it's value between 0
and 15
?
Assume, if you like, that the character is a valid hex character.
I have no chance so I'll have a go at the most boring.
( c <= '9' ) ? ( c - '0' ) : ( (c | '\x60') - 'a' + 10 )
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
(c&15)+(c>>6)*9
为了响应“它是如何工作的”,它会丢弃足够的位,以便数字映射到 [0:9] 和字母映射到 [1:6],然后为字母添加 9。
c>>6
是if (c >= 64) ...
的替代。(c&15)+(c>>6)*9
In response to "How does it work", it throws away enough bits so that the numbers map to [0:9] and the letters map to [1:6], then adds 9 for the letters. The
c>>6
is a stand-in forif (c >= 64) ...
.一种简单的方法是在字符串中查找它:
另一种方法是将其转换为数字,然后检查它是否是字符:
One simple way is to look for it in a string:
Another way is to convert it as a digit, and then check if it's a character:
在
C
中你可以这样:In
C
you can so something like:在 JavaScript 中:
In JavaScript:
这是无聊的 C 版本(我的 C 很生疏,所以它也可能是错误的)。
Here's the boring C version (and my C is very rusty, so it's probably wrong as well).