本帖最后由 dangjianghao 于 2009-10-10 08:59:34 编辑

解决方案 »

  1.   

    问题如下:
        现在需要将一个文件以二进制打开,然后一次读取512字节,然后对比当前读取的512字节中第1、2、3、4个字节是否为1、0、1、0。 
    =======================================
    不明白你的问题,一个字节(byte) = 8位(bit) = 8位二进制符(1,0)
    什么叫
    '第1、2、3、4个字节是否为1、0、1、0'? 
      

  2.   

    或许这样能更明白一些

    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语句里面判断下,看看开头跟我要求的是否一致!!。
      

  3.   

    呵呵,基本概念还是要保证清晰,要不理解会有偏差
    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)....)
      

  4.   

    - -#,逻辑混乱了..
    ====================
    实际上严格点应该是
    if(ord($a[0])==0x01)....)
      

  5.   


    0x01 这是代表16进制的,描述问题要清楚。你说00,01人家以为2进制呢。$a[0] 就是第一个字节,以此类推。
    然后用 Ord($a[0])==1 && Ord($a[1])==0 && Ord($a[2])==1 && Ord($a[3])==0 判断