易码技术论坛

 找回密码
 加入易码
搜索
查看: 356810|回复: 14

如何把DAT中的数据按位读取出来

[复制链接]
发表于 2007-7-29 17:17:40 | 显示全部楼层
用位移指令啊
先读出来,再移
 楼主| 发表于 2007-7-29 17:44:29 | 显示全部楼层
难道要用指针?
能不能举个例子
发表于 2007-7-29 17:53:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-7-29 18:37:07 | 显示全部楼层
……的确没看懂mm要干什么……
按十六进制读……没有听说过。
如果说按2进制读,就是1次读8个bit……
以我猜测,mm要用位判断吧?有1个char中的某各位表示某状态,只有0和1之分的那种。
如果是这样,可以如此
  1. char bitC[10];//声明一个数组bitC,用来做位检测这样可以有 8bit*10 = 80个bit位。
  2. char getbit(char index)//index表示要测试的那个bit位
  3. {
  4.    char i,bitI,tmp;
  5.    i = index/8;   //算出要测的bit在哪个bitC里
  6.    bitI = index%8;   //算出要测的是这个bitC的哪个位
  7.    tmp = bitC[i];
  8.    tmp = tmp<<bitI;
  9.    tmp = tmp>>7;
  10.    return tmp;
  11. }
  12. void main()
  13. {
  14.    bitC[0] = 8;//设定第4个bit为1( 8的二进制码是00001000)
  15.    printf("bit4 = %d",getbit(4));//检测第4个bit并输出结果
  16.    getchar();
  17. }
复制代码
下图表示物理内存里的对应……
说明.jpg
 楼主| 发表于 2007-7-29 19:00:23 | 显示全部楼层
表达不是很清楚
就是做到这种效果 就好了 进行二进制文件操作 尤其是读 写在电脑端好实现
未命名.GIF
发表于 2007-7-29 19:05:44 | 显示全部楼层
lava就是二进制操作的啊...
GVbasic好象是ASC
发表于 2007-7-29 19:05:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-7-29 19:40:49 | 显示全部楼层
引用第5楼murmur2007-07-29 19:00发表的“”:
表达不是很清楚
就是做到这种效果 就好了 进行二进制文件操作 尤其是读 写在电脑端好实现

我明白了,是要读入的数是16进制的吧?
lava里,2进制和16进制没区别的。在内存里他们都是2进制的方式存的,只是显示方式不同。图片里 那些16进制的数,都是转换后得到的。
1个8bit的char存的是1个2位(16进制位)的16进制数。
如:0001转换成16进制是01
00001000 转换成16进制是 81
lava里只能读入2进制的数据,要显示成什么,怎么用都要自己写函数完成。
ps:lava也能按asc码读吧好像……
ps: 8421码小知识
8421码分4个bit位 由高到低分别表示4个权值:8、4、2、1
用8421表示16进制时……每4bit位表示1个16进制位

1000B 是 8+0+0+0 ->08H
↑ ↑ ↑ ↑
8421

1111B 是 8+4+2+1 ->0fH
↑ ↑ ↑ ↑
8421

10000100 是 (8+0+0+0)+(0+4+0+0) ->84H
↑↑↑↑ ↑↑↑↑
84218421
发表于 2007-7-29 19:47:40 | 显示全部楼层
对,,,gvb里是ASC码存的lava是二进制的
 楼主| 发表于 2007-7-29 21:35:46 | 显示全部楼层
问题系统提供的函数只能读取1个字节也就是四位 如果要半个字节的内容 怎么办

而且 貌似lava的说明里没有字符串转换的函数 提取ASCII的函数也没有啊
发表于 2007-7-29 22:37:50 | 显示全部楼层
半个字节……
要bit0~3的话跟0x0F按位与:
a=a&15;
要bit4~7的话跟0xF0按位与,然后右移四次(或者除以16,右移快):
a=a&240,a>>4;
如果要读取每个位的话……16进制转2进制……
如果要检测某个位为1或0的话也可以用与运算,看运算后数值变没变就行。
发表于 2007-7-29 23:19:35 | 显示全部楼层
引用第10楼murmur2007-07-29 21:35发表的“”:
问题系统提供的函数只能读取1个字节也就是四位 如果要半个字节的内容 怎么办

而且 貌似lava的说明里没有字符串转换的函数 提取ASCII的函数也没有啊
1字节=1char=8bit
取高字节用 &0xf0
取低字节用 &0x0f

发现mm对逻辑算术了解不多,建议百度下……
发表于 2007-7-29 23:21:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-7-29 23:21:34 | 显示全部楼层
补充下,0x打头表示后面跟的是16进制的数。在lava里如此~
 楼主| 发表于 2007-7-29 16:12:14 | 显示全部楼层 |阅读模式
  fread貌似是按字节读取
如果要按位读取十六进制数的内容 怎么操作?
最好有相关的文章(GVM2.2)
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-4-30 06:01 , Processed in 0.019537 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表