PHP二进制读取文件的问题 本帖最后由 dangjianghao 于 2009-10-10 08:59:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题如下: 现在需要将一个文件以二进制打开,然后一次读取512字节,然后对比当前读取的512字节中第1、2、3、4个字节是否为1、0、1、0。 =======================================不明白你的问题,一个字节(byte) = 8位(bit) = 8位二进制符(1,0)什么叫'第1、2、3、4个字节是否为1、0、1、0'? 或许这样能更明白一些00001400h: 01 00 01 00 EF 7A CF 94 F0 1B C1 D4 FC 19 10 07 00001410h: D0 C9 8B E5 C0 6A F7 2C 24 CB FA 45 01 AB 04 13 00001420h: BC C8 6D 78 EC FE 4E 38 BE 25 5F 80 7F 6D BE A1 00001430h: 1D D9 AD 54 B8 ED 68 64 E8 0A 80 83 5C 4B 22 E7 00001440h: 9A A4 3D 6B 90 31 7E 1F F6 B8 DC B8 86 B9 88 76 00001450h: 41 99 4B E9 F2 51 1D 6D 81 B0 B3 C7 96 92 90 C7 00001460h: 2F AB 6E AF 87 B2 B8 73 5E 00 95 84 21 B5 B8 2C 00001470h: E3 F8 D9 D2 41 0F 88 A6 B3 8C 27 E3 BC 80 B3 7C 00001480h: 8C 42 F2 5B 75 EB A1 7F 73 D8 DB 81 E3 95 AB 17 00001490h: EE 93 37 CD 40 47 36 52 F7 8B F9 DD 6C 29 95 1F 000014a0h: DF 9D 06 F9 C5 A2 92 C6 DD FA 91 E2 1F 48 F3 83 000014b0h: 0B ED 6E A4 B4 F7 75 2E BA AE 19 DB 25 93 F3 1D 000014c0h: 33 F1 B5 CA EA 0E 41 D9 68 4E 4B 23 7E EC B4 37 000014d0h: 09 76 6C CB AB 08 23 77 5D 94 77 8C DA F1 49 A5 000014e0h: B1 23 47 6E EB 91 9E FC 24 41 6E 0E D0 7B D2 ED 000014f0h: AD AB CD 0B A8 A4 BB BE 0B 4C 5E 03 E5 BF D8 43 00001500h: A1 5E A4 34 8C FD 16 30 A5 D1 5D 82 4B A8 23 40 00001510h: 86 5A E3 68 75 14 30 9E 3C 90 A1 DF 25 2A A4 B5 00001520h: 63 C6 EE B5 6D B6 45 8C E9 5D AF 2B 06 41 DC 21 00001530h: 8A 44 93 04 D8 ED 79 49 E6 24 D0 25 EC 1C 61 48 00001540h: DA 97 B3 8B B8 2D F5 2F 9A 8F 75 77 1F 16 DD 70 00001550h: D7 F7 08 3A D3 B4 EB 6B 6A AC 87 6C 7D 51 51 73 00001560h: 16 77 8A 55 28 F9 08 15 11 BD C8 71 D6 57 8D 5E 00001570h: 64 B2 73 C0 21 2C EA AE 53 59 DE 42 7F F7 FD 0200001580h: 5F DA D5 57 7B C9 8E BC 9A D1 4C 01 1D B4 DC B1 00001590h: C8 94 E1 E9 51 F7 42 0E 64 98 A1 ED A1 DF 39 33 000015a0h: FD 74 D8 1E A1 5D 5F 7D 0D CB CE 60 85 56 A3 E5 000015b0h: 5D 5C 1E 8F BC A1 74 F4 2D 0E 01 A4 F2 B1 F9 F7 000015c0h: 89 14 CB 73 CD E7 D8 3F B8 B0 37 92 6D B7 3F 55 000015d0h: 9B EF 85 4B 4F 60 75 80 58 D1 74 12 17 89 F3 DD 000015e0h: D0 FB 39 C6 EF BE E6 29 4F E6 DA 3E 11 EE F7 62 000015f0h: 73 2C 84 E4 F9 AB 30 7E C4 79 A6 1F 75 89 91 36 这就是我需要的那段,,开头是以01 00 01 00开始。。我现需要在if语句里面判断下,看看开头跟我要求的是否一致!!。 呵呵,基本概念还是要保证清晰,要不理解会有偏差01,00,01,00是内容前4个字节的16进制表示,知道这个if(($a[0]==1)&&($a[1]==0)&&($a[2]==1)&&($a[3]==0))改成if(($a[0]==chr(0x01))&&($a[1]==chr(0x00))&&($a[2]==chr(0x01))&&($a[3]==chr(0x00)))或者if((ord($a[0])==1)&&(ord($a[1])==0)&&(ord($a[2])==1)&&(ord($a[3])==0))//因为16进制00,01与10进制0,1等价实际上严格点应该是if((hexdec(ord($a[0]))==1)....) - -#,逻辑混乱了..====================实际上严格点应该是if(ord($a[0])==0x01)....) 。0x01 这是代表16进制的,描述问题要清楚。你说00,01人家以为2进制呢。$a[0] 就是第一个字节,以此类推。然后用 Ord($a[0])==1 && Ord($a[1])==0 && Ord($a[2])==1 && Ord($a[3])==0 判断 哥哥姐姐弟弟妹妹们,请问如何连接到支付宝实现在线支付?在线等急死了 PHP伪静态的问题 关于注册用户名的正则匹配写法 百度bae,如何发邮件 我看分页类 请大家发表意见 好让我学得更好 如何xmlhttp向php页面发送数据,比如http://ns.altratek.com/integration/向这个页面发送数据。急 民意调查 用自己做的控件(播放控件),在ie安全性高的情况下不能用,有什么办法能解决吗? 请问MYSQLI无法读取数据库问题 php sleep php哪种开发工具好用? 讨一个Paypal的支付接口代码
现在需要将一个文件以二进制打开,然后一次读取512字节,然后对比当前读取的512字节中第1、2、3、4个字节是否为1、0、1、0。
=======================================
不明白你的问题,一个字节(byte) = 8位(bit) = 8位二进制符(1,0)
什么叫
'第1、2、3、4个字节是否为1、0、1、0'?
00001400h: 01 00 01 00 EF 7A CF 94 F0 1B C1 D4 FC 19 10 07
00001410h: D0 C9 8B E5 C0 6A F7 2C 24 CB FA 45 01 AB 04 13
00001420h: BC C8 6D 78 EC FE 4E 38 BE 25 5F 80 7F 6D BE A1
00001430h: 1D D9 AD 54 B8 ED 68 64 E8 0A 80 83 5C 4B 22 E7
00001440h: 9A A4 3D 6B 90 31 7E 1F F6 B8 DC B8 86 B9 88 76
00001450h: 41 99 4B E9 F2 51 1D 6D 81 B0 B3 C7 96 92 90 C7
00001460h: 2F AB 6E AF 87 B2 B8 73 5E 00 95 84 21 B5 B8 2C
00001470h: E3 F8 D9 D2 41 0F 88 A6 B3 8C 27 E3 BC 80 B3 7C
00001480h: 8C 42 F2 5B 75 EB A1 7F 73 D8 DB 81 E3 95 AB 17
00001490h: EE 93 37 CD 40 47 36 52 F7 8B F9 DD 6C 29 95 1F
000014a0h: DF 9D 06 F9 C5 A2 92 C6 DD FA 91 E2 1F 48 F3 83
000014b0h: 0B ED 6E A4 B4 F7 75 2E BA AE 19 DB 25 93 F3 1D
000014c0h: 33 F1 B5 CA EA 0E 41 D9 68 4E 4B 23 7E EC B4 37
000014d0h: 09 76 6C CB AB 08 23 77 5D 94 77 8C DA F1 49 A5
000014e0h: B1 23 47 6E EB 91 9E FC 24 41 6E 0E D0 7B D2 ED
000014f0h: AD AB CD 0B A8 A4 BB BE 0B 4C 5E 03 E5 BF D8 43
00001500h: A1 5E A4 34 8C FD 16 30 A5 D1 5D 82 4B A8 23 40
00001510h: 86 5A E3 68 75 14 30 9E 3C 90 A1 DF 25 2A A4 B5
00001520h: 63 C6 EE B5 6D B6 45 8C E9 5D AF 2B 06 41 DC 21
00001530h: 8A 44 93 04 D8 ED 79 49 E6 24 D0 25 EC 1C 61 48
00001540h: DA 97 B3 8B B8 2D F5 2F 9A 8F 75 77 1F 16 DD 70
00001550h: D7 F7 08 3A D3 B4 EB 6B 6A AC 87 6C 7D 51 51 73
00001560h: 16 77 8A 55 28 F9 08 15 11 BD C8 71 D6 57 8D 5E
00001570h: 64 B2 73 C0 21 2C EA AE 53 59 DE 42 7F F7 FD 02
00001580h: 5F DA D5 57 7B C9 8E BC 9A D1 4C 01 1D B4 DC B1
00001590h: C8 94 E1 E9 51 F7 42 0E 64 98 A1 ED A1 DF 39 33
000015a0h: FD 74 D8 1E A1 5D 5F 7D 0D CB CE 60 85 56 A3 E5
000015b0h: 5D 5C 1E 8F BC A1 74 F4 2D 0E 01 A4 F2 B1 F9 F7
000015c0h: 89 14 CB 73 CD E7 D8 3F B8 B0 37 92 6D B7 3F 55
000015d0h: 9B EF 85 4B 4F 60 75 80 58 D1 74 12 17 89 F3 DD
000015e0h: D0 FB 39 C6 EF BE E6 29 4F E6 DA 3E 11 EE F7 62
000015f0h: 73 2C 84 E4 F9 AB 30 7E C4 79 A6 1F 75 89 91 36
这就是我需要的那段,,开头是以01 00 01 00开始。。我现需要在if语句里面判断下,看看开头跟我要求的是否一致!!。
01,00,01,00是内容前4个字节的16进制表示,知道这个if(($a[0]==1)&&($a[1]==0)&&($a[2]==1)&&($a[3]==0))
改成if(($a[0]==chr(0x01))&&($a[1]==chr(0x00))&&($a[2]==chr(0x01))&&($a[3]==chr(0x00)))
或者if((ord($a[0])==1)&&(ord($a[1])==0)&&(ord($a[2])==1)&&(ord($a[3])==0))//因为16进制00,01与10进制0,1等价
实际上严格点应该是
if((hexdec(ord($a[0]))==1)....)
====================
实际上严格点应该是
if(ord($a[0])==0x01)....)
0x01 这是代表16进制的,描述问题要清楚。你说00,01人家以为2进制呢。$a[0] 就是第一个字节,以此类推。
然后用 Ord($a[0])==1 && Ord($a[1])==0 && Ord($a[2])==1 && Ord($a[3])==0 判断