如何在 delphi 中将 long 转换为二补码、big-endian Tbytes
How to convert from long to two-complement, big-endian Tbytes in delphi
请帮我把 Java 代码翻译成 Pascal。
评论:这里准备数据,8个字节用于营业额计数器(对于每个可能的营业额都足够了......),但是规范只需要至少5个字节,0-7个字节用于周转计数器,用8字节的二补码表示,Big Endian表示(等于Java LONG),字节8-15设置为0负值是可能的(很少见)
Long turnoverCounter = 50501;
ByteBuffer byteBufferData = ByteBuffer.allocate(16);
byteBufferData.putLong(turnoverCounter);
byte[] data = byteBufferData.array();
// data result = [0, 0, 0, 0, 0, 0, -59, 69, 0, 0, 0, 0, 0, 0, 0, 0]
java byteBuffer Data.putLong 对 Pascal 感兴趣
谢谢。
Java long
的 Pascal 等效为 Int64
,您还需要更改字节顺序;例如
type
TBufferData = array[0..15] of Byte;
TLongBytes = array[0..7] of Byte;
procedure putLong(var Buffer: TBufferData; L: Int64);
begin
Buffer[0]:= TLongBytes(L)[7];
Buffer[1]:= TLongBytes(L)[6];
Buffer[2]:= TLongBytes(L)[5];
Buffer[3]:= TLongBytes(L)[4];
Buffer[4]:= TLongBytes(L)[3];
Buffer[5]:= TLongBytes(L)[2];
Buffer[6]:= TLongBytes(L)[1];
Buffer[7]:= TLongBytes(L)[0];
end;
另请注意,byte
是 Java 中的有符号类型,它在 Pascal 中的直接等效项是 ShortInt
(Byte
是 Pascal 中的无符号类型)。
请帮我把 Java 代码翻译成 Pascal。
评论:这里准备数据,8个字节用于营业额计数器(对于每个可能的营业额都足够了......),但是规范只需要至少5个字节,0-7个字节用于周转计数器,用8字节的二补码表示,Big Endian表示(等于Java LONG),字节8-15设置为0负值是可能的(很少见)
Long turnoverCounter = 50501;
ByteBuffer byteBufferData = ByteBuffer.allocate(16);
byteBufferData.putLong(turnoverCounter);
byte[] data = byteBufferData.array();
// data result = [0, 0, 0, 0, 0, 0, -59, 69, 0, 0, 0, 0, 0, 0, 0, 0]
java byteBuffer Data.putLong 对 Pascal 感兴趣
谢谢。
Java long
的 Pascal 等效为 Int64
,您还需要更改字节顺序;例如
type
TBufferData = array[0..15] of Byte;
TLongBytes = array[0..7] of Byte;
procedure putLong(var Buffer: TBufferData; L: Int64);
begin
Buffer[0]:= TLongBytes(L)[7];
Buffer[1]:= TLongBytes(L)[6];
Buffer[2]:= TLongBytes(L)[5];
Buffer[3]:= TLongBytes(L)[4];
Buffer[4]:= TLongBytes(L)[3];
Buffer[5]:= TLongBytes(L)[2];
Buffer[6]:= TLongBytes(L)[1];
Buffer[7]:= TLongBytes(L)[0];
end;
另请注意,byte
是 Java 中的有符号类型,它在 Pascal 中的直接等效项是 ShortInt
(Byte
是 Pascal 中的无符号类型)。