java 大端序_字节序,终于搞得比较透了

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int main(int argc, char* argv[])

{

const int i = 0x61626364;

printf("%x\n", *(char*)&i); //这里显示64,因为little endian的原因,little代表LSB,endian代表变量所存放的内存的起始端,即内存的低地址

printf("%x\n", i);//61626364

const char* pp = "abcd"; //这在内存里从低地址到高地址依次存的真的是abcd,而之前定义的int i,在内存里从低地址到高地址依次存的却是dcba

printf("%x\n", *(int*)pp);//64636261

wchar_t a=L'我';//wchar_t其实就是unsigned long, 注意,这里必须加前缀L,加L代表该字符是UNICODE,否则编译会报warning(gcc会认为这样的写法和'abc'一样邪恶), 这里的赋值其实就相当于unsigned long a = 0x6211

printf("%x\n", a);//6211

printf("%x\n", *(char*)&a);//这里显示11,因为我的UNICODE编码是6211

cout << sizeof(a) << endl; // 4

//const char* pW = L"我"; 编译会报错,因该用const wchar_t* pW = L"我";

const char* p = "我"; //这个char序列存放的依次是e6, 88, 91, 我的utf8编码是e68891,这是因为当前使用的编辑器vi设定了utf8编码

cout << strlen(p) << endl; //3

printf("%x++\n", p[0]); //e6

printf("%x\n", *(int*)p);//最终显示为9188e6, %x代表将一个int的数值以十六进制的形式显示出来,由于little endian的原因,在提取一个int的时候,会从内存的开始连续取4个btype,并且将最后一个byte最为int的MSB(即LSB放在前内存前端,MSB放在内存后端)

const char* p2 = "abcd";

printf("%x\n", *(int*)p2); //dcba

return 0;

}

posted on 2011-04-08 10:19 so true 阅读(340) 评论(0)  编辑  收藏 所属分类: C&C++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值