java与c#通信数据转换问题
//由于JAVA语言的数据类型都是有符号类型,而C# C++一般数据类型都是分有符号和无符号,
//因此在通信过程中传递的Byte[]无法直接转换成C#需要的类型,
//以前倒是没注意这些细节,因为一般用一种语言编程,
//大都有内置的转换方法。跨语言环境的转换就的自己动手想办法了。
1、java的Byte[]转换成c#的Int32
private int CoverJavaByteToInt(byte[] bytes){
char[] chars = Encoding.ASCII.GetChars(bytes);
int r = 0;
r |= (((int)(chars[0])) & 0xff) << 24;
r |= (((int)(chars[1])) & 0xff) << 16;
r |= (((int)(chars[2])) & 0xff) << 8;
r |= (((int)(chars[3])) & 0xff);
return r;
}
2、java的Byte[]转成c#的unshort
private ushort CoverJavaByteToUnshort(byte[] bytes){
ushort r = 0;
char[] chars=Encoding.ASCII.GetChars(bytes);
r |= (ushort)((chars[0] & 0xff) << 8);
r |= (ushort)(chars[1] & 0xff) ;
return r;
}
此代码会出现错误在某些情况,大致原因是因为转换char时值遭到改变,应该是表示范围问题导致
private ushort CoverJavaByteToUnshort(byte[] bytes){
ushort r = 0;
r |= (ushort)((bytes[0] & 0xff) << 8);
r |= (ushort)(bytes[1] & 0xff);
return r;
}
此代码目前测试没问题了,如果谁遇到特殊情况 请与我联系
3、java的Byte[]转成c#的string
(注意:我这个函数是根据我工作需要写的因为可能存在多个string或其他数据类型在整个数据流中,如你接收的数据流就是字符串,完全可以没这么麻烦,请自行修改)///
/// 转换Byte[]到String 默认采用UTF-8///
/// 数据流的BYTE数组/// 最终转换结果字符串
/// String的在数据流中的起始位置
/// 下一个数据类型在数据流中的起始位置
private int CoverJavaByteToString(byte[] bytes,ref string str,int indexStart){
byte[] uidLen = new byte[2];
Array.Copy(bytes,indexStart, uidLen, 0, 2);
ushort len = CoverJavaByteToUnshort(uidLen);
str = Encoding.UTF8.GetString(bytes,2+indexStart, len);
return str.Length+2+indexStart;
}
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
JAVA中的依赖倒原则
美国法律有一条最基本的准则就是“人人平等”,我们不去管它是经过什么样的斗争、什么样的流血牺牲换来的,只把它理解为一个JAVA方法,该方法定义如下:
public final boolean 人人平等(人1,人2){
return true;
&n ......
尽管云计算这一术语并不新鲜(Amazon在2006年就开始提供它的云服务),但从2008年起它才开始真正成为流行词,这期间,Google和
Amazon的云服务逐渐获得了公众的关注。 Google的App Engine使用户能够在Google基础设施上构建和托管 Web 应用程序。
连同S3,AmazonWeb Services还包括Elastic Cloud Compute
(EC2) ......
把之前项目中写的一个Java通用验证码程序整理了一下,与大家分享,希望能抛砖引玉。
一、主要功能:
1、支持纯数字、大写字母、小写字母,及两两混合或三者混合类型验证码;
2、支持自定义特殊字符排除(如0oOi1jI);
3、支持图片及文字两种类型验证码;
4、支持自定义验证码图片大小;
5、支持自定义干扰线条数;
......
/**
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年 ......