|
7鱼币
#include <stdio.h>
int main()
{
int a = 0x1234;
char *b = (char *)&a;//已知int 为4个字节,在这里进行强制转化为char 时,是否会溢出?然后把int 中的第一个字节中的两个16进制数传递给*b ?
if (*b == 0x12)//在这里*b应该是字符型 ,为什么却和要和整形数据作比较?
{
printf("大端!\n");
}
else
{
printf("小端!\n");
}
return 0;
}
//这是一个小测试,结果如图。按照我的理解int的四个字节第一个传给char形,余下溢出传给m之后的地址中,但我经测试后结果却很奇怪,m之后的结果和我想的并不一样,同时结果显示的4我也很奇怪,为什么会这样?
#include <stdio.h>
int main()
{
int i = 0x1234;
char *m = (char *)&i;
char *p = (char *)(m + 1);
printf("%c\n", *m);//
printf("%c\n", *(p - 1));//
printf("%c\n", *p);//
return 0;
}
本帖最后由 jackz007 于 2019-12-4 18:20 编辑
整型数 0x12345678 内存中占用 4 个字节空间,对于 Little Endian 架构的机器而言,这 4 个字节在内存中的存储顺序是 78 56 34 12
这一点,可以通过下面的程序进行证明:
- #include <stdio.h>
- int main()
- {
- int i = 0x12345678 ;
- char * m = (char *) & i ;
- printf("%02x %02x %02x %02x\n\n" , * m , *(m + 1) , * (m + 2) , * (m + 3)) ;
- }
复制代码
编译、运行实况:
- C:\Bin>g++ -o x x.c
- C:\Bin>x
- 78 56 34 12
- C:\Bin>
复制代码
正如你所见,根本就没有什么整型数到 char 型的转化,我们所做的,只是把构成这个整型数的 4 个 char (byte)按顺序显示出来了而已。
|
-
最佳答案
查看完整内容
整型数 0x12345678 内存中占用 4 个字节空间,对于 Little Endian 架构的机器而言,这 4 个字节在内存中的存储顺序是 78 56 34 12
这一点,可以通过下面的程序进行证明:
编译、运行实况:
正如你所见,根本就没有什么整型数到 char 型的转化,我们所做的,只是把构成这个整型数的 4 个 char (byte)按顺序显示出来了而已。
|