c++ 简单的对内存的操作
2011-10-25 13:31
232 查看
最近做网络的实验题需要对内存进行操作。比如说对于一个数组
char tempstr[2];
tempstr[0] = 'a';
tempstr[1] = 'b';
要取十六位赋给一个unsigned short型的变量。对于这种要求有一下几种作法:
1:
unsigned short temp = 0;
temp = *(unsigned short *) tempstr;
cout << htons(temp)<<endl;
但是这种做法有个问题就是x86架构的计算机采用的是小端序。所以对于这种情况在转换的过程中会把a放在低八位,把b放在高八位。但是这题的要求是把a放在高八位。所以这种做法虽然很直接但是求的结果采用的是大端序的。因此需要一个转换函数htons。这个函数在windows平台下需要头文件#include <Winsock2.h>,并且如果报错的话需要在项目工程-属性-链接器-命令行里添加其他选项Ws2_32.lib 。这样通过这个函数转换后就为小端序了(事实上ntohs也可以,如果从函数用意上来说转小端序应该用这个函数,不过效果一样)。
2:
unsigned short ((((unsigned short)'a'<<8)&0xff00)|((unsigned short)'b'&0x00ff))
这种方法是先强制类型转换,然后将高八位乘以二的八次方,在通过与或操作把需要保留的位保留,这是个很直接的方法,用意清楚。其实是推荐操作。
3:
unsigned short((unsigned short)a<<8) + (unsigned short) b
这种方法是对于unsigned short型执行加法操作。这个方法和上个方法对于此题效果相同,但是用的范围没有上个方法广。
PS:htons和ntohs是一对,其处理的是16为的数据--short。htonl和ntohl为一对,其处理的是32位数据-long。
char tempstr[2];
tempstr[0] = 'a';
tempstr[1] = 'b';
要取十六位赋给一个unsigned short型的变量。对于这种要求有一下几种作法:
1:
unsigned short temp = 0;
temp = *(unsigned short *) tempstr;
cout << htons(temp)<<endl;
但是这种做法有个问题就是x86架构的计算机采用的是小端序。所以对于这种情况在转换的过程中会把a放在低八位,把b放在高八位。但是这题的要求是把a放在高八位。所以这种做法虽然很直接但是求的结果采用的是大端序的。因此需要一个转换函数htons。这个函数在windows平台下需要头文件#include <Winsock2.h>,并且如果报错的话需要在项目工程-属性-链接器-命令行里添加其他选项Ws2_32.lib 。这样通过这个函数转换后就为小端序了(事实上ntohs也可以,如果从函数用意上来说转小端序应该用这个函数,不过效果一样)。
2:
unsigned short ((((unsigned short)'a'<<8)&0xff00)|((unsigned short)'b'&0x00ff))
这种方法是先强制类型转换,然后将高八位乘以二的八次方,在通过与或操作把需要保留的位保留,这是个很直接的方法,用意清楚。其实是推荐操作。
3:
unsigned short((unsigned short)a<<8) + (unsigned short) b
这种方法是对于unsigned short型执行加法操作。这个方法和上个方法对于此题效果相同,但是用的范围没有上个方法广。
PS:htons和ntohs是一对,其处理的是16为的数据--short。htonl和ntohl为一对,其处理的是32位数据-long。
相关文章推荐
- 简单介绍C/C++中结构体内存对齐
- 混搭下的C与C++内存操作
- 《c++ 操作xml加载时添加元素简单测试小程序》
- 简单的 C++ 操作数据库类
- 学习c++内存操作之硬件介绍
- C++动态内存操作
- C++文件简单的读写操作实例
- C++内存操作
- C++ 简单IO操作
- 二叉树的简单操作(c++实现)
- [C++ 学习] C++ Primer 第4版 习题 4.30 字符串操作 & 我对堆内存 和 常量区内存的一些理解
- c++ void,内存操作函数
- VS2010 C++最简单的检查内存泄露
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- C++简单内存泄漏检查机制实现
- c++ 内存四区简单总结
- Linux简单设备驱动(1):使用IO内存操作GPIO--LED
- C++中map的概念,与简单操作
- 【C++入门】简单的日期类操作
- 最简单的动态申请内存的操作