这个跟大小端有关系么?vs里面怎么设置可是实现输出倒过来?

shiter
人工智能领域优质创作者
博客专家认证
2015-09-07 08:49:00


// ss.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<stdint.h>
#include <stdio.h>

union X
{
int32_t a;
struct
{
int16_t b;
int16_t c;
};
};

int main()
{
X x;
x.a = 0x20150810;
printf("%x,\n",&x.a);
printf("%x,\n",x.a);
printf("%x,%x\n",&x.b,&x.c);
printf("%x,%x\n",x.b,x.c);

getchar();
return 0;
}


...全文
572 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-10-02
  • 打赏
  • 举报
回复
x=0x12345678;
lm_whales 2015-10-02
  • 打赏
  • 举报
回复
大小端,这个有两种看法 某些人把Intel 8086~如今的X86 字节顺序,称为 大端 Big End motorola 68XXXX 等 芯片,字节顺序,称为小端 Little End 另一些人恰恰相反 总之是两种不同的字节顺序 简单的测试就是 int main(){ union{ int x char a[4]; }; x=0x12345678 if( a[0] == 0x78) printf("II");//Intel 格式,TIFF 文件中 II表示 Intel 格式 else printf("MM");//motorola 格式,TIFF 文件中 MM表示 Motorola格式 return 0; }
wang0635 2015-10-02
  • 打赏
  • 举报
回复
引用 11 楼 wangyaninglm 的回复:
[quote=引用 4 楼 wang0635 的回复:]
int	x = 0x12;
if (*(char *)&x == 0x12)
	//小端
else
	//大端
想请问一下,这么写是啥意思?[/quote] 运行时判断大小端
shiter 2015-10-02
  • 打赏
  • 举报
回复
引用 4 楼 wang0635 的回复:
int	x = 0x12;
if (*(char *)&x == 0x12)
	//小端
else
	//大端
想请问一下,这么写是啥意思?
赵4老师 2015-09-08
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
宋寒松 2015-09-08
  • 打赏
  • 举报
回复
在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
mymtom 2015-09-08
  • 打赏
  • 举报
回复
是的,和大小端有关。

#include<stdint.h>
#include <stdio.h>

#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#include <winsock2.h>
#else
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#endif
 
union X
{
    int32_t a;
    struct 
    {
        int16_t b;
        int16_t c;
    };
};
 
int main()
{
    union X x;
    x.a = htonl(0x20150810);
    printf("%x,\n",&x.a);
    printf("%x,\n",ntohl(x.a));
    printf("%x,%x\n",&x.b,&x.c);
    printf("%x,%x\n",ntohs(x.b), ntohs(x.c));
 
    getchar();
    return 0;
}
LinkSe7en 2015-09-08
  • 打赏
  • 举报
回复
只能转成char[] 然后奇偶swap
mujiok2003 2015-09-08
  • 打赏
  • 举报
回复
改代码把
引用
x.a = htonl(0x20150810);
欧阳春晖 2015-09-08
  • 打赏
  • 举报
回复
这个和处理器有关,大小端
wang0635 2015-09-07
  • 打赏
  • 举报
回复
int	x = 0x12;
if (*(char *)&x == 0x12)
	//小端
else
	//大端
二班的码农 2015-09-07
  • 打赏
  • 举报
回复
对,这个跟大小端有关。 PowerPC处理器使用大端模式,而Pentuim处理器使用小端模式。
heroesjun 2015-09-07
  • 打赏
  • 举报
回复
这个是取决于处理器的,没法从vs里设置。
shiter 2015-09-07
  • 打赏
  • 举报
回复
我去。我不是这个版的版主,

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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