在Java中扫描文件中的字符
我正在从事的java项目要求我编写与此C代码相当的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_
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