如何在C中检查十六进制数(%x)是否以某个数字开头?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C中检查十六进制数(%x)是否以某个数字开头?相关的知识,希望对你有一定的参考价值。

我现在正在开发一个与操作系统相关的项目,有一个步骤需要检查十六进制数是否以3开头,使用C.

目前我的想法是将该十六进制数转换为字符串并检查初始字符,但无法找到任何文档来执行此操作。有人有什么想法吗?也许只是一个暗示。

答案

有很多方法可以将数字转换为十六进制字符串(sprintf浮现在脑海中; How can I convert an integer to a hexadecimal string in C?列出更多) - 但是,你为什么要这样做?

通过将每个半字节(4位)转换为十六进制“数字”来形成完整的十六进制数。要获得第一个,您可以将值除以16,直到达到最终(='first',以十进制和十六进制值共同的从左到右的表示法)数字。如果那是3,你就完成了。

假设value是无符号数:

while (value > 15)
     value >>= 4;

然后检查value == 3

另一答案

你的想法不错,你可以使用sprintf,它的功能类似于printf / fprintf,但不是在屏幕上打印(或者更精确:写入FILE*缓冲区),它将内容存储在char缓冲区中。

char value[16]; // more than enough space for 4 byte values

int reg = 0x3eef;

sprintf(value, "%x", reg);

if(value[0] == '3')
    printf("The hexadecimal number 0x%s starts with a 3.\n", value);

以上是关于如何在C中检查十六进制数(%x)是否以某个数字开头?的主要内容,如果未能解决你的问题,请参考以下文章

数值转换

检查并验证以某个值开头的某个数字是不是可用

如何检查 CComBSTR 是不是以某个前缀开头?

在 Bash 中,如何检查字符串是不是以某个值开头?

C语言中16进制的表示方法

检查字符串是不是以正则表达式数字开头