改变数据的存储模式
2013-08-12 17:04
225 查看
判断机器是小端的还是大端的:
#include <stdio.h>//判断机器是否为小端存储
//方法一
bool isLowStore()
{
int a = 0x01;
char *p = (char*)&a;//获得a的低位字节内容
if(*p)//是1则为小端存储
return true;
else
return false;
}
typedef union
{
char c;
int a;
}U;//联合体中的内容是共用一段内存的,联合体对象内存的大小就是其成员中所占内存最大的类型的那个成员的大小
//方法二
bool isLowStore2()
{
U u;
u.a = 0x01;
if(1 == u.c)
return true;
else
return false;
}
void main()
{
if(isLowStore2())
printf("是小端存储\n");
else
printf("是大端存储\n");
}
改变数据的存储模式,如将一个整数的大端存储模式改为小端存储模式或将一个整数的小端存储模式改为大端存储模式
做法就是,用一个临时变量反序存储参数中的内容,然后将这个变量再赋值给原参数,可以用引用,这样就可以改变原参数的值。·具体实现就是定义一个temp=0变量,然后将参数x从低到高的字节依次或上temp,最后让参数x = temp就完成了。因为参数是传递的引用,所以改变参数的值会改变原始传递给参数的变量的值。
实现代码如下:
#include <stdio.h> //改变数据的存储模式,如将一个整数的大端存储模式改为小端存储模式 /*其实总体思想就是定义一个temp=0变量,然后将x从低到高的字节依次或上temp, 最后让x = temp就完成了。因为参数是传递的引用,所以改变参数的值会改变原始传递给参数的变量的值。 */ void changeStoreType(int &x) { int shirft = sizeof(int)*8 - 8; int temp = 0; char *p = (char*)&x;//让字符指针p依次移动一个字节来获取参数x的每个字节 int i; for(i=0; i<sizeof(int); i++) { temp |= (*p)<<shirft; p++; shirft -= 8; } x = temp; } void main() { int x = 0x12345678; printf("%x\n",x); changeStoreType(x); printf("%x\n",x); }
相关文章推荐
- Hive的数据存储模式
- 模式自由(Schema-free)和数据存储的非格式化趋势
- SaaS多租户模式数据存储方案
- Android中使用SharedPreferences进行数据存储及文件操作模式
- 工厂设计模式 - 数据存储的特有方式
- 数据盾吕途:要保证数据的安全,改变存储方式才是关键
- 改变数据时代的存储与分享
- Android 学习第17课,使用文件的数据存储(4种存储模式)
- 解决ESXi 数据存储无法进入维护模式的解决方法
- 让你彻底明白hive数据存储各种模式
- python网络爬虫-数据存储中如何改变mysql数据库的字符为unicode
- Android中使用SharedPreferences进行数据存储及文件操作模式
- Oracle与DB2数据存储模式的区别详解
- 让你彻底明白hive数据存储各种模式
- 模式自由(Schema-free)和数据存储的非格式化趋势
- QString内部仍采用UTF-16存储数据且不会改变(一共10种不同情况下的编码)
- 吞噬大数据存储领域新机制——NoSQL模式解析
- FriendFeed 如何使用 MySQL 来存储无模式的数据
- VMware vSphere 5.1 群集深入解析(二十六)- 数据存储维护模式&汇总
- BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现