`
yy8354
  • 浏览: 80392 次
  • 性别: 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
分享到:
评论

相关推荐

    java Socket与C#通信中中文乱码问题的解决方案

    总结起来,解决Java Socket与C#通信中中文乱码问题的关键在于: 1. **客户端**:确保使用`getBytes("UTF-8")`将字符串编码为UTF-8字节数组,然后通过Socket发送。 2. **服务器端**:在接收到数据后,使用`Encoding....

    C#RSA加密与JAVA解密,实现相互通信

    "C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...

    C#JAVA密钥转换 与生成

    在跨平台通信中,如C#与Java应用程序之间的交互,确保密钥的一致性和兼容性是至关重要的。 在C#中,我们可以使用.NET框架中的`System.Security.Cryptography.RSACryptoServiceProvider`类来生成和操作RSA密钥。同样...

    java调用C#接口及所涉及到的架包

    - **兼容性问题**:Java与C#的类型系统有所不同,可能需要进行数据类型的适配和转换。 - **性能**:跨语言调用通常比同语言调用有更高的开销,因此要考虑性能影响。 - **错误处理**:由于是跨语言通信,错误处理...

    java和C#通用des3加解密

    标题中的“java和C#通用des3加解密”指的是在Java和C#这两种不同的编程语言中实现DES(Data Encryption Standard)的加强版——3DES(Triple DES)加解密算法。3DES是一种广泛使用的对称加密算法,通过三次应用DES的...

    基于Socket实现Android(java)与C#的同步通信.pdf

    本知识点将详细介绍如何通过Socket实现Android(java)与C#的同步通信,并分析在实现通信过程中所涉及的关键技术,如Socket通信技术、C#和Java的套接字编程以及Json序列化。 首先,Socket通信技术基于客户/服务器模式...

    普通java访问c# webService

    此外,注意在Java中处理与C#的互操作时可能会遇到类型转换的问题,因为C#和Java的数据类型不完全相同。例如,C#的DateTime在Java中可能会被映射为XMLGregorianCalendar,需要进行适当的转换。 总的来说,这个例子...

    C#调用Java接口演示

    使用IKVM.NET或其他类似的工具可以简化这个过程,但仍然需要注意跨语言通信中的类型映射、异常处理和性能优化等问题。实际项目中,根据具体需求和环境,可能还需要考虑性能、安全性和可维护性等因素,选择最合适的...

    Java 调用 C# DLL

    本话题聚焦于“Java调用C# DLL”,这是一个涉及到Java与.NET Framework交互的技术问题。C#编译的DLL(动态链接库)是.NET环境下的组件,而Java作为跨平台的语言,如何与之交互是一个重要的知识点。 首先,为了实现...

    C#和Java实现互通的RSA&DES加解密算法

    1. 密钥对的生成:在C#和Java中创建RSA的公钥和私钥,并将其转换为可传递的格式(如Base64字符串)。 2. 加密过程:C#使用RSA公钥或DES密钥加密数据,Java接收并解密。 3. 解密过程:Java使用RSA私钥或DES密钥加密...

    Protostuff for java and c#

    这个库的核心功能是将Java或C#的对象转换成二进制格式,以便于存储、传输或者与其他系统进行数据交换。 Protostuff支持多种序列化格式,包括protobuf(Protocol Buffers)、json、xml等,使得数据可以在不同平台之间...

    Java中3DES加密与C#兼容

    "Java中3DES加密与C#兼容"这个主题就是关注如何在Java和C#这两种不同的编程语言中实现相同的数据加密机制,确保数据的安全传输。3DES(Triple DES)是一种广泛使用的对称加密算法,它通过三次应用DES(Data ...

    AES java 与 C#加密解密

    在IT领域,加密和解密是确保数据安全的重要手段,特别是在跨平台的环境中,如Java和C#之间进行数据交换时。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,适用于保护敏感...

    java与wcf通信

    7. **互操作性挑战**:由于Java和.NET的生态系统不同,跨平台通信可能会遇到互操作性问题,如数据类型转换、命名空间处理等。理解这些挑战并知道如何解决是关键。 8. **安全和认证**:WCF支持多种安全机制,如证书...

    HTTP TLS1.2 HTTP2.0JAVA转换C#HTTP

    为了解决这个问题,HTTPS(HTTP over TLS/SSL)应运而生,它通过使用TLS(传输层安全)协议来加密通信,确保数据的安全传输。 TLS1.2是TLS协议的第四个主要版本,取代了之前的SSL协议。TLS1.2提供了强大的加密算法...

    nettty+C#通信Demo

    【标题】:“netty+C#通信Demo”是一个关于如何实现Netty与C#之间通信的示例项目。这个Demo展示了如何使用这两个不同平台的技术进行高效、稳定的数据交换。 【描述】:这个Demo提供了实际操作的例子,说明了Netty...

    hessian java +c# 数据测试

    在IT行业中,跨平台通信是常见的需求,而Hessian作为一种二进制协议,因其轻量级、高效的特点,被广泛用于Java和C#等不同语言之间的远程调用(RPC)和数据交换。本文将深入探讨Hessian在Java服务端与C#客户端之间的...

    Java和C#通过DES加密得到相同数据

    标题“Java和C#通过DES加密得到相同数据”所涉及的知识点主要集中在数据加密领域,特别是使用DES(Data Encryption Standard)算法在不同的编程语言中实现兼容的加密过程。DES是一种广泛应用的对称加密算法,其核心...

    java and c# java and c#

    起初,微软视Java为解决C和C++问题的一种工具,但随着与Sun公司的法律纠纷,微软被迫停止VisualJ++的开发,转而研发了自己的语言——C#。下面将深入分析C#与Java的主要差异,尤其是那些C#特有的特性。 ### 中间语言...

    C#调用JAVA方法

    本篇文章将详细探讨如何在C#中调用Java方法,以及与之相关的技术,包括IKVM.NET。我们将通过提供的资源,即“UseJAVA.rar”和“JAVADemo.rar”,来了解具体的实现过程。 首先,让我们理解C#调用Java方法的基本原理...

Global site tag (gtag.js) - Google Analytics