Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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中扫描文件中的字符_Java_C_File Io_Java.util.scanner - Fatal编程技术网

在Java中扫描文件中的字符

在Java中扫描文件中的字符,java,c,file-io,java.util.scanner,Java,C,File Io,Java.util.scanner,我正在从事的java项目要求我编写与此C代码相当的java代码: void read_hex_char(char *filename, unsigned char *image) { int i; FILE *ff; short tmp_short; ff = fopen(filename, "r"); for (i = 0; i < 100; i++) { fscanf(ff, "%hx", &tmp_

我正在从事的java项目要求我编写与此C代码相当的java代码:

void read_hex_char(char *filename, unsigned char *image)
{
    int     i;
    FILE   *ff;
    short  tmp_short;
    ff = fopen(filename, "r");
    for (i = 0; i < 100; i++)
    {
        fscanf(ff, "%hx", &tmp_short);
        image[i] = tmp_short;
    }
    fclose(ff);
}
void read\u hex\u char(char*文件名,unsigned char*图像)
{
int i;
文件*ff;
短tmp_短;
ff=fopen(文件名,“r”);
对于(i=0;i<100;i++)
{
fscanf(ff、%hx、&tmp_短);
图像[i]=tmp_短;
}
fclose(ff);
}
我已经编写了这个Java代码

void read_hex_char(String filename, char[] image) throws IOException
{
    Scanner s=new Scanner(new BufferedReader(new FileReader(filename)));
    for(int i=0;i<100;i++)
    {
        image[i]=s.nextShort();
    }
    s.close();
 }
void read\u hex\u char(字符串文件名,char[]图像)引发IOException
{
Scanner s=新的Scanner(新的BufferedReader(新的文件读取器(文件名));

对于(int i=0;i请记住,java字符类型非常智能(比字节更智能)并表示unicode字符(读卡器类将传入的字节流处理为unicode字符,可能根据实际的语言环境和字符集设置解码或修改字节).从你的来源我猜这只是你想要的实际字节 内存缓冲区。下面是一个很好的解释:


请记住,java字符类型非常智能(比字节更智能),表示unicode字符(读卡器类将传入的字节流处理为unicode字符,可能根据实际的语言环境和字符集设置解码或修改字节).从你的来源我猜这只是你想要的实际字节 内存缓冲区。下面是一个很好的解释:


我会使用FileInputStream并逐字节读取(短字符仅为两个字节,字符比短字符更“复杂”)。我的项目中的简单字节提取代码:

public static byte[] readFile(File file) throws IOException {
    FileInputStream in = new FileInputStream(file);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    int ch = -1;
    while ((ch = in.read()) != -1)
        bos.write(ch);
    return bos.toByteArray();
}

对于您的示例,最简单的方法是找到几个示例:在其上运行C函数,然后运行java函数,并比较结果。它应该会为您提供信息。

我会使用FileInputStream并逐字节读取(短的是两个字节,char比短的更“复杂”)。我项目中的简单字节提取代码:

public static byte[] readFile(File file) throws IOException {
    FileInputStream in = new FileInputStream(file);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    int ch = -1;
    while ((ch = in.read()) != -1)
        bos.write(ch);
    return bos.toByteArray();
}

对于您的示例,最简单的方法是找到几个示例:在其上运行C函数,然后运行java函数,并比较结果。它应该提供信息。

对于解析十六进制值,您可以使用
Short.parseShort(字符串s,int基数)
带基数16。在Java中,
char
short
稍有不同,因此如果要执行位图操作,
short
可能是更好的类型。但是,请注意,Java没有无符号类型,这可能会使某些操作可能用于图像处理(如按位操作)棘手。

要解析十六进制值,可以使用
Short.parseShort(字符串s,整数基数)
带基数16。在Java中,
char
short
稍有不同,因此如果要执行位图操作,
short
可能是更好的类型。但是,请注意,Java没有无符号类型,这可能会使某些操作可能用于图像处理(如按位操作)棘手。

你还没有试过java代码吗?@KorhanÖztürk没有,因为这是一个初始模块。我需要在此基础上构建。你想实现什么?你想把字节从文件复制到数组吗?@Vinze我想把十六进制数从文件复制到数组。缩写是一个以文本形式写的数字,它介于“-32768”和“32767”之间。你确定你所有的字符都是用数字写的吗?你还没有试过java代码吗?@KorhanÖztürk没有,因为这是初始模块之一。我需要在此基础上构建。你想实现什么?你想把字节从文件复制到数组吗?@Vinze我想把十六进制数从文件复制到数组arrayA short是一个以文本形式书写的数字,介于“-32768”和“32767”之间。您确定所有字符都是以数字形式书写的吗?当然,另一种方法是使用commons IO方法
toByteArray
当然,另一种方法是使用commons IO方法
toByteArray