【问题标题】:Get int from bytes in Java, encoded first in C#从 Java 中的字节获取 int,首先在 C# 中编码
【发布时间】:2012-04-15 05:09:27
【问题描述】:

我在从首先用 C# 编码的字节数组转换 int 时遇到问题。我首先将其转换为大端序,因为 Java 以大端序而不是小端序工作。以下代码将 into 编码为字节

    Console.WriteLine("A new data client has connected!");
    byte[] welcomeMessage = ASCIIEncoding.ASCII.GetBytes("Welcome young chap! Please let me know about anything you need!");

    welcomeMessage = Byte.add(BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(20)), welcomeMessage);

Byte.add 将两个数组附加在一起。这很有效,因为我在 C# 到 C# 之间使用过它。欢迎消息首先加载一个标题字节,让客户端知道信息是什么。当我尝试对其进行解码时,我在 java 端得到了奇怪的值。我不确定我是否解码或编码不正确。 java端就是这样。这是在安卓设备上运行的:

   if (ByteBuffer.wrap(buffer).getInt() == 20)
   {
          latestMessage = new String(buffer); 
   }
   latestMessage = String.valueOf(ByteBuffer.wrap(buffer).getInt(0)); //Lets me see what value this is. Cant attach debugger for some reason ATM.

【问题讨论】:

    标签: c# java android endianness


    【解决方案1】:

    ByteBuffer 可以配置为使用 order() 方法将多字节值解码为大端或小端。

    例如:

    final ByteBuffer bb = ByteBuffer.wrap(buffer);
    bb.order(ByteOrder.LITTLE_ENDIAN);
    
    final int i = bb.getInt();
    ...
    

    【讨论】:

      【解决方案2】:

      也许BitConverter 类可以提供帮助。看看here

      【讨论】:

      • 嘿,我刚刚意识到我忘记包含将标头 int 转换为字节的行。我已经相应地改变了它。
      猜你喜欢
      • 2017-07-08
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      相关资源
      最近更新 更多