我想编辑一个使用ord方法的php代码,php代码如下:
$fh=fopen("../ip.data","r");
fseek($fh,327680);
$country_id=ord(fread($fh,1)); //return 137
我尝试用java:编写代码
FileReader ip=new FileReader("ip.data");
int i = 0;
int str;
while((str=ip.read()) != -1){
if(i==327681){
System.out.println(str); //return 0
break;
}
i++;
}
但两者并不相等。我知道PHP的ord('a')==97
,Java的(int)'a'==97
。ip.data在这里下载。
FileReader假定输入文件的系统默认字符集,可能为utf-8,例如*在这种情况下,最多可以读取四个字节来"组成"从FileReader.read()获得的单个字符。
所以也许(只是在这一点上的猜测)这就是问题所在。你的php代码不需要任何编码,它只读取一个(8比特)字节,在java中它的等价物是例如
fis = new FileInputStream("ip.data");
country_id = fis.read(); // FileInputStream.read() is reading a byte, not a character
*)要验证这一假设,请尝试
FileReader fr = new FileReader("ip.data")
System.out.println( fr.getEncoding() );
它打印什么?
试试这个:
String str = "t";
byte b = str.getBytes()[0];
int ascii = (int) b;
也许你必须使用char。