C语言中unsigned char* 与char*的区别?
来源:互联网 发布:mac os 系统清理 编辑:程序博客网 时间:2024/05/17 02:35
http://bbs.csdn.net/topics/390184854
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
int
main()
{
unsigned
char
k = 0;
int
i = -1;
short
a = -12345;
char
*p;
printf
(
"sizeof(i) = %d\n"
,
sizeof
(i));
printf
(
"sizeof(a) = %d\n"
,
sizeof
(a));
p = (
char
*)&a;
for
(k=0;k<
sizeof
(a);k++)
{
printf
(
"%x "
,*(p++));
}
printf
(
"\n"
);
p = (
char
*)&i;
for
(k=0;k<
sizeof
(i);k++)
{
printf
(
"%x "
,*(p++));
}
printf
(
"\n"
);
printf
(
"i = %u | %d\n"
,i,i);
printf
(
"a = %u | %d\n"
,a,a);
printf
(
"res = %d\n"
,(-1>0u ? 1:0));
printf
(
"hello world\n"
);
return
0;
}
上述代码经编译执行后的结果为:
sizeof(i) = 4
sizeof(a) = 2
ffffffc7 ffffffcf
ffffffff ffffffff ffffffff ffffffff
i = 4294967295 | -1
a = 4294954951 | -12345
res = 1
hello world
请问为什么char类型的指针p输出的都是32位的内容呢?
将指针p的声明更改为unsigned char* p;程序输出结果如下:
sizeof(i) = 4
sizeof(a) = 2
c7 cf
ff ff ff ff
i = 4294967295 | -1
a = 4294954951 | -12345
res = 1
hello world
请问unsigned char* 与char*在这个程序中为什么能产生这种不同的结果?
char*是有符号的, 如果大于127即0x7F的数就是负数了,使用%x格式化输出,就会产生变化.
所以使用%x格式化输出数据时,记得一定要转换成无符号类型.
printf("%02x ",(unsigned char)*(p++));
有符号的字符型数据C7,CF分别传入printf,此时会将类型提升为int,由于是有符号数,所以符号位要进行扩展,得到FFFFFFCF和FFFFFFC7。
无符号的字符型数据C7,CF分别传入printf,此时会将类型提升为unsigned int,由于无符号数不进行符号位扩展,所以得到000000CF和00000C7。
p指针指向的内容确定是一个字节,无论把它解读成有符号或是无符号数,都是一个字节长度,但为什么printf会针对无符号和有符号进行符号位扩展呢,即类型提升?
难道printf默认打印16进制格式内容时,会依据平台相关的机器字长来打印吗
因为你用了%x所以提升
你用printf时不是指定了输出的格式了吗,就按你指定的格式进行转换,具体字长由编译器决定
正解!(^_^)
0 0
- C语言中unsigned char* 与char*的区别?
- c语言中 char* 和 unsigned char* 的区别浅析
- C - char与signed char, unsigned char的区别
- 【C/C++】char 与 unsigned char的本质区别
- C语言中关于char类型存储的分析 以及signed与unsigned的区别
- C语言unsigned char、char与int之间的转换
- C语言char与unsigned char的区别以及printf输出结果分析
- JAVA中的char与C语言中char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别(转)
- char与unsigned char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char 与char的区别
- char 与 unsigned char的本质区别
- 试用期交社保吗
- 下拉菜单
- 定位,虚拟键盘,推送有问题
- interweaving of objects DEMO
- 将数组变成字符串。 implode (高级应用可用在mysql where in (1,1,3)查询)
- C语言中unsigned char* 与char*的区别?
- Search Insert Position
- centOS 6.5关闭防火墙步骤
- 淘宝分布式数据库是如何实现高可用的
- stl之list
- All I Need To Know To Be A Better Programmer I Learned In Kindergarten
- 在Birt中动态插入子表字段
- php foreach用法和实例(转载,写的很详细)
- 二维指针,二维数组,以及指向数组的指针的相关问题