java - 将字节流从 java 程序发送到运行 C 的设备

标签 java endianness

我正在使用支持小端字节顺序的设备。我如何在 Java 中执行此操作?

我已经从十六进制数据创建了一个字节流并将其写入套接字输出流。我应该以以下格式发送数据。

Protocol-Version: 0x0001

Request_Code: 0x0011

Request_Size: 0x00000008

String s = "0001001100000008";
byte[] bytes = hexStringToByteArray(s);
socket.getOutputStream().write(bytes);

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
            + Character.digit(s.charAt(i+1), 16));
    }
    return data;
} 

但是,我没有收到设备对此请求的任何响应。我做错了什么吗?

最佳答案

这是一个使用 ByteBuffer 的示例。代码未经测试,因此请确保它适合您。

ByteBuffer bb = new ByteBuffer.allocate( 1024 );

short version = 0x0001;
short request = 0x0011;
int size = 0x08;

bb.order( ByteOrder.LITTLE_ENDIAN );
bb.put( version );
bb.put( request );
bb.put( size );

socket.getChannel().write( bb );

关于java - 将字节流从 java 程序发送到运行 C 的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54542268/

相关文章:

c# - Java 中的 Marshal.Copy

c++ - 什么使系统小端或大端?

powershell - 在 PowerShell 中反转字节顺序

haskell - 操纵 "network"中的原始 IP 地址以及字节顺序困惑

将 uint32_t 转换为网络字节顺序

java - 我正在尝试使用 mulesoft 通过 Java 代码将文件上传到文件夹,但出现 404 文件未找到错误

java - 如何通过 spannable 方法使用自定义字体设置所选文本的字体样式

java - 关于s :if tag of struts 2的错误

java - Spring 类未找到

c++ - DXGI_FORMAT_ 代码如何与字节顺序相关?