#include <stdio.h> int main (void) { union b { short k; //测试环境short占2字节 char i[2]; //测试环境char占1字节 }*s,a; s=&a; s->i[0]=0x41; s->i[1]=0x52; printf("%x\n",s->k); return 0; }
今天做题做了一道很怪异的题目,下面是代码,大家可以先猜一下答案。
本人一开始认为运行结果应该为 4152 ,但是在VS2008运行得出的结果竟然是 5241,咦,奇怪,怎么会反过来了呢?
经过一番测试,搜索。发现这个问题涉及到数据在内存存储的问题,也就是字节序的问题(点我查看更多关于字节序的介绍),原来在大部分的机器里面存储字符型数组是在内存中是按照从低位到高位的存储的,就是“0x41”放在内存的低位,“0x52”放到内存的高位,从数组的角度讲就是i[0]存到最低端,然后从低到高一直存。也就是下表的顺序
0x52
0x41
数据在内存中的存储都是二进制的,而且是八位一个字节的。所以i[2]在内存中实际存储为
01010010 01000001
由于在共用体里面只能是多选一的,所以变量k的值也是上表一模一样的。转换成16进制数就是 5241 。
这段程序一开始的运行结果容易给人一种假象,就是这段代码把2个数颠倒输出的,其实输出的数就是个“0101001001000001”转化而成的16进制数5241。
这题虽然有点古怪,起码自己编程是不会这样写的,但是通过仔细研究,却了解了数据在内存中是怎样存放的。重在过程。
以上全部是本人的肤浅了解,如有错误,欢迎指出。
1、首先要把你的窗体或者空间的AllowDrag属性设置为允许
2、注册DragEnter事件
3、获得文件路径,先通过e.Data.GetFormats()方法获得所有数据格式
4、调用e.GetData()方法根据指定的数据格式获得文件路径
5、有了文件路径,相信一切问题迎刃而解
下面是例子:
private void textBox1_DragEnter(object sender, DragEventArgs e) { //获得数据格式 File.WriteAllLines("C:\\1.text", e.Data.GetFormats()); //获得文件名 string[] filename = (string[])e.Data.GetData("FileNameW",true); textBox1.Text = filename[0]; string entesion = Path.GetFileName(textBox1.Text); if (!File.Exists(textBox1.Text.Trim())) { return; } //读取文件流 using (FileStream fsOpen = File.OpenRead(textBox1.Text.Trim())) { using (FileStream fs = new FileStream("C:\\" + entesion, FileMode.Create, FileAccess.Write)) { byte[] buffer = new byte[1024 * 1024]; while (true) { int result = fsOpen.Read(buffer, 0, buffer.Length); if (result <= 0) { break; } else { fs.Write(buffer, 0, result); } } fs.Flush(); } } }运行结果:
补充一点:
在win7下可能是因为权限不均衡不触发DragDrop事件,所以我在里只用到DragEnter事件,你们可以试下DragDrop事件,可能用户体验要好点!
将websocket移植到ARM系列的开发板上,查资料
http://stackoverflow.com/questions/2194645/how-to-implement-websockets-on-an-embedded-device-server
http://blaisejarrett.com/websockets/
后面的这个是将websocket放在PIC18的板子上的,先按照他的方法做。
配置autobahn的时候,出现
twisted/runner/portmap.c:10:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: Setup script exited with error: command 'gcc' failed with exit status 1
这个错误,解决办法
http://zuantianyang.blog.sohu.com/202714932.html,
即缺少了python-dev,安装即可。
sudo apt-get install python-dev
解决