您的位置:首页 > 编程语言 > C语言/C++

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: