16进制的表示方式

giveaname 2016-02-19 05:23:14
偶然间需要处理一个16进制数的字符串,印象中'\x'和’0x‘都用来表示16进制,但运行结果发现和理解的有误。写了个测试程序,运行结果如下,想请问下这三种表示方法有什么不同?最好能详细一点解释,多谢各位大神了
#include<stdio.h>
int main()
{
int letter1 = '\xff';
int letter2 = '0xff';
int letter3 = 0xff;


printf("let1:%d let1:%02x\n", letter1, letter1);
printf("let2:%d let2:%02x\n", letter2, letter2);
printf("let3:%d let3:%02x\n", letter3, letter3);

return 0;
}


运行结果:

...全文
928 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-02-22
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
lm_whales 2016-02-21
  • 打赏
  • 举报
回复
1,3都可以,结果跟0xff有关系 2这种表示结果不是16进制0xff可能是 '0', 也可能是'f', 也可能是 四个字母ASCII组成的整数 。跟0xff这个数值无关。 但是考虑到 因为char 类型的0xff 可能是是负数(C,C++语言没有规定char类型 ,是有符号数还是无符号数), 第1种表示符号扩展以后,结果是-1 ,不扩展是0xff (C,C++可能不一样,不同编译器可能不一样) 第3种表示因为就表示整型,是同一类型初始化(即便赋值结果也一样) 所以不作任何扩展, 所以结果是完全不会有问题的,和代码中的一样。
lm_whales 2016-02-21
  • 打赏
  • 举报
回复
引用 5 楼 lm_whales 的回复:
0x 是C语言源程序 的代码中 十六进制整型常量的前缀 \x 是C语言字符以及字符串(字面值)中,转义 字符 的十六进制表示(最终字符以二进制编码表示)的前缀 这二者不是同一个东西。 一个是整型常量 一个是字符(单引号内)常量, 或者字符串(双引号内)内部的一个字符常量。 当然因为字符类型也是一种整型 所以字符,用两种表示都可以 char a ='\x32' ; char a =0x32 ; 这二者是等价的; 注意C,C++字符也是整型中的一种类型, 所以可以表示字符的,都可以给整型数据赋值或者用以初始化整型。 int a='\x32' ; int a=0x32 ; 这也是等价的。
修改一下
lm_whales 2016-02-21
  • 打赏
  • 举报
回复
0x 是C语言源程序 的代码中 十六进制整型常量的前缀 \x 是C语言字符以及字符串(字面值)中,转义 字符 的十六进制表示(最终字符以二进制编码表示)的前缀 这二者不是同一个东西。 一个是整型常量 一个是字符(单引号内)常量, 或者字符串(双引号内)内部的一个字符常量。 当然因为字符类型也是一种整型 所以字符,用两种表示都可以 char a ='\x32' ; char a =0x32 ; 这二者是等价的; 注意C,C++字符也是整型中的一种类型, 所以可以表示字符的,都可以给整型数据赋值 int a='\x32' ; int a=0x32 ; 这也是等价的。
paschen 2016-02-19
  • 打赏
  • 举报
回复
第三个才是对的,前两个只是让int 的几个字节依次为'0' 'x' 'f' 'f' 而已
ooolinux 2016-02-19
  • 打赏
  • 举报
回复
当然,单引号里面可以有转义字符比如'\t','\n'等。
ooolinux 2016-02-19
  • 打赏
  • 举报
回复
引用 1 楼 u010165006 的回复:
'0xff'括号里的是字符,赋给int就等于ASCII值 问题是括号内4个字符? 0xff是整数的16进制表示,等于10进制的255,等于二进制的8个1
不好意思,单引号说成括号。 单引号里面的是字符,双引号里面的是字符串, 而单引号里面4个字符,我也不懂。
ooolinux 2016-02-19
  • 打赏
  • 举报
回复
'0xff'括号里的是字符,赋给int就等于ASCII值 问题是括号内4个字符? 0xff是整数的16进制表示,等于10进制的255,等于二进制的8个1

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧