关于十六进制0x

0x00.

       在程序设计中,以0x开始的数据表示16进制。

       比如0x00表示十进制中的0,0x01表示1。

0x01.

        “0x”是后面是十六进制数字的标示,后面是数字的主题。比如0x01其实是【0x】【01】主题部分01,就是十六进制的01,也就是一。

          如果是0x0f,那表示就是15.因为a~f分别代表的是十六进制中的10~15.

0x02.【为什么0x31 & 0x0f的结果为0x01

        要理解&符在这里表示的是按位与运算,两数均是1的时候才是1,其他均是0.

        0x31转换成二进制是:0011 0001 

        0x0f转换成二进制是 :0000 1111

        按位与后得出结果就是0000 0001

        转换成16进制就是0x01了。

转载于:https://www.cnblogs.com/chinaboyzzy/p/4930772.html

十六进制(Hexadecimal),通常简称为“hex”,是以16为基数的数系。每个位置可以有0-9以及A-F这16种不同的字符表示数值,其中字母A至F分别代表数字10至15。将一个带前缀"0x" 或 "0X"标识符开头的十六进制字符串转换成对应的十进制整数的过程叫做从十六进制转十进制。 下面是几种常见的转换方式: ### 手动计算法 对于简单的手动换算,您可以按照位权展开的方式来逐项相加求得最终的结果。例如: 假设有一个十六进制数`0xF3`, 那么它的每一位都代表着该位权重乘以它所携带的实际值: ``` F*16^1 + 3*16^0 = 15 * 16 + 3 = 240+3=243(十进制) ``` 同样的道理适用于更长串的十六进制数字比如`0xABCD`等,只需依次累加即可获得正确的答案。 ### C语言内置函数实现自动转换 当涉及到编程时,利用现有的工具或库是最方便快捷的做法了。在C/C++ 中可以直接调用系统提供的库来进行转换工作。最常用的两个函数就是`strtol()` 和`sprintf()/sscanf()`. #### 使用 `strtol()` 这是一个专门用于把各种形式的字符串表达式转化为相应的目标数值类型的高效方法;特别是支持二进制、八进制、十进制十六进制等多种输入格式识别并正确解析它们之间相互转变的需求场景下非常实用。 **示例代码** ```c #include <stdio.h> #include <stdlib.h> int main(){ const char hexString[]="0xFF"; //待处理源字符串 long decimalValue=strtol(hexString,NULL,16); printf("%ld\n",decimalValue); return 0; } ``` #### 利用 `sscanf()` 如果您想要在一个较为固定的上下文中完成类似的任务,则可以选择采用`scanf/sscanf`族中的任何一个成员进行尝试。“%x”指示符能够很好地帮助我们理解给定文本内是否隐含着十六进制编码的信息片段。 **示例代码** ```c #include<stdio.h> int main(){ unsigned int num ; sscanf ("0xAB","0x%x",&num ); printf ("%u\n",num ); return 0; } ``` 无论选择哪种方式进行操作都是可行的方案,但是考虑到灵活性与安全性等因素建议尽量优先考虑使用`strtol()` 函数来做此类事情因为其提供了更好的错误检测机制和支持更多的功能选项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值