现在有两个数字,一个取值范围是0到360的整数;另外一个取值范围是0到1之间的小数,但是为了节省空间,可以用0到100之间的整数来代表它。
现在给定两个字节来表示这两个数字。第一个需要9个比特,第二个需要7个比特,因此16个bit够了。
但是具体哪些比特代表哪个数字,这个未知。 假设用H表示第一个数字,S表示第二个数字,给出一些范例:
H=220, S=0.6; 字节1=155, 字节2=152;
H=240, S=0.6; 字节1=170,字节2=152;
H=120, S=0.6; 字节1=141, 字节2=152;
H=180, S=0.6; 字节1=127, 字节2=152;
H=0, S=1; 字节1=0, 字节2=254; 第一个字节不一定存放第一个数字。
恳请高人指点。如果需要可以提供更多的范例。这两个字节应该没有经过加密。
现在给定两个字节来表示这两个数字。第一个需要9个比特,第二个需要7个比特,因此16个bit够了。
但是具体哪些比特代表哪个数字,这个未知。 假设用H表示第一个数字,S表示第二个数字,给出一些范例:
H=220, S=0.6; 字节1=155, 字节2=152;
H=240, S=0.6; 字节1=170,字节2=152;
H=120, S=0.6; 字节1=141, 字节2=152;
H=180, S=0.6; 字节1=127, 字节2=152;
H=0, S=1; 字节1=0, 字节2=254; 第一个字节不一定存放第一个数字。
恳请高人指点。如果需要可以提供更多的范例。这两个字节应该没有经过加密。
解决方案 »
- 如何得到LPWSTR类型字符串的长度
- WebBrowser控件怎么给所显示的网页添加背景色呢
- 画圆问题!
- 完成端口中服务端只能用WSASend和WSARecv吗?
- 请问怎么编程实现程序的重新启动??
- 傻瓜问题,线程如何调试,跟踪不进去呢?
- 我的网卡好用了,散分
- 有谁看过人邮版的《Windows系统编程>>?感觉怎么样? 谁能介绍一本关于Windows系统编程方面的书?
- 文件类型不正确时,如何去掉media player 播放器控件,弹出的提示信息
- MFC如何在程序里响应任务管理器结束进程的操作
- VC操作MySQL:为什么一执行查询程序就异常退出?
- GDI+双缓冲,造成PNG图片无法透明问题,求高手解答
具体的
stuct _9_7_field
{
unsinged short a:9;
unsinged short b:7;
};
现在是这样的,这些数字存放在一个字节数组(unsigned char *),如何读取到这个结构变量里? _9_7_field x;
x=*((unsigned short *)hs); 但这样编译不过。
error C2679: 二进制“=”: 没有找到接受“unsigned short”类型的右操作数的运算符(或没有可接受的转换) 请教?
应该是 _9_7_field* pX;
pX = (_9_7_field*)hs;
然后pX->a就是你第一个9比特的数。以此类推。
unsinged short a =155;
unsinged short b =152;
unsinged short c =a<<7|b;
我的问题是哪些比特表示哪个数字,比如说一种可能是低地址的9个比特表示H,高地址的7个比特表示S,但也可能相反,即高地址的9个比特表示H,低地址的7个bit表示S,或者更复杂的表示方法。我估计可能要写算法判断一下。谢谢关注。 另外2楼给出的方法我也没见过。我想测试一下。新手,请见谅。
举例:
H ==》 1101 1100
S == 60 ==》 0011 1100
两个字节 1001 1000 1001 10011
怎么多了1个1呢··楼主给个解释呗··谢谢
举例:
H ==》 1101 1100
S == 60 ==》 0011 1100
两个字节 1001 1000 1001 10011