Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在bin文件的字节数组[]中搜索字节序列?_Java_Arrays_Swing - Fatal编程技术网

Java 如何在bin文件的字节数组[]中搜索字节序列?

Java 如何在bin文件的字节数组[]中搜索字节序列?,java,arrays,swing,Java,Arrays,Swing,我正在尝试编写一个程序,我可以: 加载文件 输入扫描数据的起始和起始偏移地址 扫描偏移范围以搜索特定的字节序列(如“05805A6C”) 检索每个匹配的偏移量并将其写入.txt文件 i66.tinypic.com/2zelef5.png 如图所示,我需要在文件中搜索“05805A6C”,然后将偏移量“0x21F0”打印到.txt文件中 我正在使用JavaSwing来实现这一点。到目前为止,我已经能够以字节数组[]的形式加载该文件。但我还没有找到一种方法来搜索特定的字节序列,也没有在偏移量范围内设

我正在尝试编写一个程序,我可以:

  • 加载文件
  • 输入扫描数据的起始和起始偏移地址
  • 扫描偏移范围以搜索特定的字节序列(如“05805A6C”)
  • 检索每个匹配的偏移量并将其写入.txt文件
  • i66.tinypic.com/2zelef5.png

    如图所示,我需要在文件中搜索“05805A6C”,然后将偏移量“0x21F0”打印到.txt文件中

    我正在使用JavaSwing来实现这一点。到目前为止,我已经能够以字节数组[]的形式加载该文件。但我还没有找到一种方法来搜索特定的字节序列,也没有在偏移量范围内设置搜索

    这是我打开文件并将其读入字节数组[]的代码

    public class Read {
    
    static public byte[] readBytesFromFile () {
    
      try {  
        JFileChooser chooser = new JFileChooser();
    
        int returnVal = chooser.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) { 
    
            FileInputStream input = new FileInputStream(chooser.getSelectedFile());
            byte[] data = new byte[input.available()];
            input.read(data);
            input.close();
            return data;
    
         }
         return null;
      }
    
      catch (IOException e) {
        System.out.println("Unable to read bytes: " + e.getMessage());
        return null;
      }
     }
    
    }
    
    和我的代码,我试图在字节之间搜索

    byte[] model = Read.readBytesFromFile();
    
        String x = new String(model);
        boolean found = false;
    
        for (int i = 0; i < model.length; i++) {
            if(x.contains("05805A6C")){
                found = true;
            }
       }
    
        if(found == true){
            System.out.println("Yes");
        }else{
            System.out.println("No");
        }
    
    byte[]model=Read.readBytesFromFile();
    字符串x=新字符串(模型);
    布尔值=false;
    对于(int i=0;i
    编辑似乎不同系统的字符集不同,因此您可能会得到不同的结果,因此我使用另一种方法来处理:

    String x = HexBin.encode(model);
    String b = new String("058a5a6c");
    
    int index = 0;
    while((index = x.indexOf(b,index)) != -1 )
    {
        System.out.println("0x"+Integer.toHexString(index/2));
        index = index + 2;
    }
     ...
    

    编辑似乎不同系统的字符集不同,因此您可能会得到不同的结果,因此我使用另一种方法进行处理:

    String x = HexBin.encode(model);
    String b = new String("058a5a6c");
    
    int index = 0;
    while((index = x.indexOf(b,index)) != -1 )
    {
        System.out.println("0x"+Integer.toHexString(index/2));
        index = index + 2;
    }
     ...
    
    以下是一种在字节数组中搜索字节序列的防爆炸方法:

    public boolean find(byte[] buffer, byte[] key) {
        for (int i = 0; i <= buffer.length - key.length; i++) {
            int j = 0;
            while (j < key.length && buffer[i + j] == key[j]) {
                j++;
            }
            if (j == key.length) {
               return true;
            }
        }
        return false;
    }
    
    公共布尔查找(字节[]缓冲区,字节[]键){
    对于(int i=0;i,这里有一种在字节数组中搜索字节序列的防爆炸方法:

    public boolean find(byte[] buffer, byte[] key) {
        for (int i = 0; i <= buffer.length - key.length; i++) {
            int j = 0;
            while (j < key.length && buffer[i + j] == key[j]) {
                j++;
            }
            if (j == key.length) {
               return true;
            }
        }
        return false;
    }
    
    公共布尔查找(字节[]缓冲区,字节[]键){
    

    对于(int i=0;i
    “pmdl”
    是一个
    字符串(不是
    字节[]
    )。“05805A6C”是一个字符串,不是字节序列,但我应该如何搜索该序列呢?
    “pmdl”
    是一个
    字符串(不是
    字节[]
    )“05805A6C”是一个字符串,不是一个字节序列,但我应该如何搜索该序列呢?我得到一个错误“从int到byte的可能有损转换”@Midori_hige检查我的编辑,我用eclipse对它进行了测试,结果很好,令人惊讶。现在,关于获得每个发现的偏移量?@Midori_hige:我的编辑现在反映了序列根据想法产生的索引。除非编码正确,否则将字节数组转换为这样的字符串是有损的。我得到的错误是“从int到byte的可能有损转换"@Midori_hige检查我的编辑,我用eclipse对它进行了测试,结果很好,令人惊讶。现在,关于获得每个发现的偏移量?@Midori_hige:我的编辑现在反映了序列产生的索引。除非你正确编码,否则将字节数组转换为这样的字符串是有损的。我如何使用它?这是一个类?1)您从代码中调用它,将缓冲区和键作为参数传递。2)不。它是一个方法。您可以将它放入类中。或者您将代码/方法体复制到其他内容中,根据需要进行重构。我不知道如何使用它。缓冲区和键应该是什么?我只有一个字节数组[]哪个是文件(模型)中的数据Buffer是您从文件中获取的数据。Key是一个包含您正在搜索的字节序列的字节数组。是的,我使用了该方法,是的,它在执行搜索时确实起作用。但是,如何获取每个匹配的偏移地址?还有,如何使用不同的字节序列从上到下进行多次搜索?我将如何使用它?是的这是一个类?1)您从代码中调用它,将缓冲区和键作为参数传入。2)不。这是一个方法。您可以将其放入类中。或者您将代码/方法体复制到其他内容中,根据需要进行重构。我不懂如何使用它。缓冲区和键应该是什么?我只有一个字节数组[]哪个是文件(模型)中的数据Buffer是您从文件中获取的数据。Key是一个包含您正在搜索的字节序列的字节数组。是的,我使用了该方法,是的,它在执行搜索时确实起作用。但是,如何获取每个匹配的偏移地址?另外,如何使用不同的字节序列从上到下进行多次搜索?