该问题来自社区帖: https://bbs.csdn.net/topics/617911958.为符合问答规范, 该问题经过ChatGPT优化
MemTableEh和FDMemTable的Bytes数据的问题 第一个数据集是用MemTableEh获取Hst数据转换成时间戳显示的是1120000000000000(转换异常的) 第二个数据集是用FDMemTable获取Hst数据转换成时间戳显示的是000000000003C8E4(转换正确的) 同样的数据,同样的转换代码为什么会显示不同的结果 下面是转换代码: ```Delphi // 时间戳16位二进制转换成字符串1 function BufToHex(const Buf; const Size: Cardinal): string; const // maps nibbles to hex digits cHexDigits: array [$0 .. $F] of Char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); var I: Cardinal; // loops thru output string PB: ^Byte; // addresses each byte in buffer begin PB := @Buf; SetLength(Result, 2 * Size); I := 1; while I <= 2 * Size do begin Result[I] := cHexDigits[PB^ shr 4]; Result[I + 1] := cHexDigits[PB^ and $0F]; Inc(PB); Inc(I, 2); end; end; // 时间戳16位二进制转换成字符串2 function BytesToHex(const Bytes: array of Byte): string; begin Result := BufToHex(Bytes, Length(Bytes)); end; ``` 图片链接: ![图片](https://img-community.csdnimg.cn/images/c1ec9f012ecb4a998f0ff844cbe4d801.png)
MemTableEh和FDMemTable的Bytes数据的问题 第一个数据集是用MemTableEh获取Hst数据转换成时间戳显示的是1120000000000000(转换异常的) 第二个数据集是用FDMemTable获取Hst数据转换成时间戳显示的是000000000003C8E4(转换正确的) 同样的数据,同样的转换代码为什么会显示不同的结果 下面是转换代码: ```Delphi // 时间戳16位二进制转换成字符串1 function BufToHex(const Buf; const Size: Cardinal): string; const // maps nibbles to hex digits cHexDigits: array [$0 .. $F] of Char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); var I: Cardinal; // loops thru output string PB: ^Byte; // addresses each byte in buffer begin PB := @Buf; SetLength(Result, 2 * Size); I := 1; while I <= 2 * Size do begin Result[I] := cHexDigits[PB^ shr 4]; Result[I + 1] := cHexDigits[PB^ and $0F]; Inc(PB); Inc(I, 2); end; end; // 时间戳16位二进制转换成字符串2 function BytesToHex(const Bytes: array of Byte): string; begin Result := BufToHex(Bytes, Length(Bytes)); end; ``` 图片链接: ![图片](https://img-community.csdnimg.cn/images/c1ec9f012ecb4a998f0ff844cbe4d801.png)