gpt4 book ai didi

java - 网络字节顺序-电报

转载 作者:行者123 更新时间:2023-12-01 09:19:12 30 4
gpt4 key购买 nike

早上好

我正在编写一个应用程序,需要通过 ATS 软件与 Verifone vx820 ped 进行通信。

在他们的文档中,为了传输数据,它指出:

transmitting data

我有一个关于如何执行此操作的 C# 示例,位于此处:

// Format of ATS telegram:
//
// +---------------------------- ... ---------------------------------+
// | xx | xx | xx | xx | Data |
// +---------------------------- ... ---------------------------------+
// Byte | 0 | 1 | 2 | 3 | 4 ...
// | |
// Field | -- Data Length -- | Data
//
// Data length is 4 bytes; network byte order (big-endian)

try
{
// Attempt to make TCP connection to ATS
Connect();

// Convert data length to network byte order...
int iLengthNetworkByteOrder = IPAddress.HostToNetworkOrder(Data.Length);

// ...then convert it to a byte array
byte[] DataLength = BitConverter.GetBytes(iLengthNetworkByteOrder);

// Construct the send buffer, prefixing the data with the data length as shown above
m_SendBuffer = new byte[DataLength.Length + Data.Length];
DataLength.CopyTo(m_SendBuffer, 0);
Data.CopyTo(m_SendBuffer, DataLength.Length);

// Signal the background thread there is data to send
m_eventSendDataAvailable.Set();
}

但是我正在构建这是java。谁能帮我转换到 Java。 Java 中有简单的方法可以做到这一点吗?

有没有人构建了一个使用 ATS 和 java 的应用程序,有什么我应该知道的有用的东西

最佳答案

在Java中,你有很棒的ByteBuffer类,可让您将普通值(整数、 float 、 double )编码/解码为字节。 ByteBuffer 允许您通过其 order(ByteOrder) 指定使用的字节顺序。方法。

因此,假设您有一个 byte[] 数据,您希望在其前面添加 32 位大端字节序的长度,如您的示例所示。你会写:

// Create a buffer where we'll put the data to send
ByteBuffer sendBuffer = ByteBuffer.allocate(4 + data.length);
sendBuffer.order(ByteOrder.BIG_ENDIAN); // it's the default, but included for clarity

// Put the 4-byte length, then the data itself
sendBuffer.putInt(data.length);
sendBuffer.put(data);

// Extract the actual bytes from our sendBuffer
byte[] dataToSend = sendBuffer.array();

如果您遇到相反的情况(ATS 向您发送带有前缀长度的数据),则代码将非常相似,但使用 getIntget 代替。

关于java - 网络字节顺序-电报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40281433/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com