易截截图软件、单文件、免安装、纯绿色、仅160KB

C#到Java byte类型冲突的解决

最近要改写一个核心加密认证类,从C#改写成Java。
发现在调试时,加密的数据无论如何也对不上。
经过跟踪,发现问题出在C#和Java byte类型的区别上:在C#里 byte类型是无符号的,而Java里是有符号的,所以C#里的129到Java里就成了负数。
发现了问题,解决就比较容易了,针对Java的byte,采用Int来进行存储。
通过如下代码从byte到int进行转换:
/**
* from byte to int, because of byte in java is signed
*/
private static int toInt(int b) {
return b >= 0 ? (int)b : (int)(b + 256);
}
对于下面C#的代码:
private static AuthenticationTicket fromByteArray(byte[] buf)
{
MemoryStream ms = new MemoryStream(buf);
BinaryReader reader = new BinaryReader(ms);
short version = reader.ReadInt16();
short scope = reader.ReadInt16();
int key = reader.ReadInt32();
}
改写为如下形式,相当于重新实现BinaryReader的ReadInt16和ReadInt32方法。
private static AuthenticationTicket fromByteArray(int[] bufInt)
{
int version = readInt16(bufInt);
int scope = readInt16(bufInt);
long key = readInt32(bufInt);
}

private static int readInt16(int[] bufInt) {
int i = 0;
for(int j = 0; j < 2; readArrayIndex++, j++) {
i += bufInt[readArrayIndex] << (j << 3);
}
return i;
}
private static long readInt32(int[] bufInt) {
long i = 0;
for(int j = 0; j < 4; readArrayIndex++, j++) {
i += bufInt[readArrayIndex] << (j << 3);
}
return i;
}
上面的例子说明,c#和Java虽然非常相像,但是一些关键细节的不同是需要仔细考虑的。


相关文档:

JAVA最短路径代码

import java.util.LinkedList;
import java.util.List;
public class ShortestPaths {
     private static String showPath[] = { "", "", "", "", "", "" }; 
      
     & ......

JAVA常用操作语句 项目中的总结三


获得mysql和oracle链接的类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectDB {
private static final String MYSQL = "jdbc:mysql://";
private static final String ORACLE = "jdbc:oracle:thin:@";
private ConnectD ......

REST架构与Java实现1——REST概念

由于有个合作项目,用到了REST,我们这边的服务器是java的,合作方那边主要是PHP环境,为了远程调用的问题,使用了REST作为API的实现方
案。现在项目做得差不多了,下面记下自己的一点心得,算是笔记吧。
    REST(Representational State Transfer)的说法来自“Architectural Styles and the Desi ......

Java语言的26个细节


Java语言的26个细节[转载]
Java作为一门优秀的面向对象的程序设计语言,正在被越来越多的人使用。本文试图列出作者在实际开发中碰到的一些Java语言的容易被人忽视的细节,希望能给正在学习Java语言的人有所帮助。
1,位移运算越界怎么处理
    考察下面的代码输出结果是多少?
    int a=5;
  ......

Java 调用EXE

使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程序.  
  该方法有6个可访问版本:  
  1.exec(String   command)  
  2.exec(String   command,   String   envp[],   File   dir)    
  3.exec(String   cmd, &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号