`
yy8354
  • 浏览: 79169 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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或其他数据类型在整个数据流中,如你接收的数据流就是字符串,完全可以没这么麻烦,请自行修改)

        /// <summary>
        /// 转换Byte[]到String 默认采用UTF-8
        /// </summary>
        /// <param name="bytes">数据流的BYTE数组</param>
        /// <param name="str">最终转换结果字符串</param>
        /// <param name="indexStart">String的在数据流中的起始位置</param>
        /// <returns>下一个数据类型在数据流中的起始位置</returns>
        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;
        }

 

1
0
分享到:
评论

相关推荐

    Silverlight与Java通信远程调用封装

    可以转换日常使用中的任意复杂类型通信,成功解决C# DateTime和Java Date传递问题,解决java容器泛型与C#容器泛型转换问题,解决复杂对象问题(对象属性是另外对象,容器中套容器)等。 欢迎大家使用,有问题,可以...

    C#串口通信程序实现无感知签到与答题

    3.)通过校牌指令执行相关业务,拉取数据通过访问java的http接口获取数据,并将数据进行处理转换为16进制形式下发给校牌 4.)配置相关接口地址 5.)校牌答题与教室端互动通过本地UPD传递给教室端,

    C#微软培训资料

    14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...

    Visual.C#.编程精彩百例

    实例95 Java与C#混合编程的应用 实例96 C#与C++混合编程的应用 实例97 C#与VB混合编程的应用 实例98 C#组件与C#客户程序编程的应用 实例99 C#与XML联合应用XMLHelper 实例100 在C#中部署应用程序 附录 WinCV ...

    C#通过串口获取地磅称重重量

    网文也有一些,本文通过C#编写的winform程序与地磅进行对接,实时获取地磅称重数据。串口通讯,其根本还是一种通讯协议,所以根据不同的设备通讯协议也不尽相同,不过规律虽不同,但原理都是一致的。

    《Visual.C#.编程精彩百例》配套光盘part1

    第1篇 Visual C#基础编程实例 实例1 C#经典程序--Hello World 实例2 C#的简单输入输出(I/O) 实例3 C#的复杂输入输出(I/O) 实例4 通信录管理与维护 实例5 文件与目录管理 实例6 用户界面...

    《Visual.C#.编程精彩百例》配套光盘.part2

    第1篇 Visual C#基础编程实例 实例1 C#经典程序--Hello World 实例2 C#的简单输入输出(I/O) 实例3 C#的复杂输入输出(I/O) 实例4 通信录管理与维护 实例5 文件与目录管理 实例6 用户界面...

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    CTP.Net 是一个将上期技术的CTP C++库转换为托管库.zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...

    JSON在Java中的相互转换

    什么是JSON? JSON (JavaScript Object ...数据交换格式,是指客户端和服务器之间通信,传递数据时,数据使用的格式是json JSON在java中的使用 json在java中操作,需要用到 歌提供的gson工具类 public class GsonTest {

    java面试题

    答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,这类异常可以由我们去一一捕获并...

    IOS系统定位标准坐标转换为国内标准.zip

    软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    一些常用编码转换的C源码,更多详见openssl项目。.zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...

    各地图坐标系统( WGS84 GCJ02 BD09 )转换 php版本.zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...

    asp.net知识库

    帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个...

    深入浅出设计模式(中文版电子版)

    4.2.3C#实例——商业对象与数据对象 107 4.2.4Java实例——不同系统的图像处理 112 4.2.5优势和缺陷 114 4.2.6应用情景 115 4.3CompositePattern(组合模式) 115 4.3.1定义 115 4.3.2组合模式的现实应用——...

    深入浅出设计模式(中文版)

    4.2.3C#实例——商业对象与数据对象 107 4.2.4Java实例——不同系统的图像处理 112 4.2.5优势和缺陷 114 4.2.6应用情景 115 4.3CompositePattern(组合模式) 115 4.3.1定义 115 4.3.2组合模式的现实应用——...

    C#和Java有什么区别和联系

    由于公司同是使用.NET和JAVA,而且各个服务集使用接口来进行通信,因此某些例如清算系统、收银台之类的安全性比较高的系统会使用RSA进行加密。因此会涉及到秘钥的转换。所以大概看了下C#的秘钥跟JAVA的秘钥区别。 ...

    baxter_rr_bridge:一个柳絮包,用于承载Baxter机器人的ROS主题,作为Robot Raconteur(RR)服务。 这允许通过RR支持的任何平台和语言进行通信,例如Python,C ++,C#,MATLAB和Java

    这允许通过RR支持的任何平台和语言进行通信,例如Python,C ++,C#,MATLAB和Java。 2018年7月: 最新更新中添加的新功能: 摄像机主机现在需要在工作站上安装OpenCV。 它用于Aruco标签检测的新功能。 调用ARtag_...

Global site tag (gtag.js) - Google Analytics