5,557
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
第一个数据集是用 MemTableEh,获取Hst数据转换成时间戳显示的是1120000000000000(转换异常的)
第二个数据集是用FDMemTable ,获取Hst数据转换成时间戳显示的是000000000003C8E4(转换正确的)
同样的数据,同样的转换代码为什么会显示不同的结果
下面是获取数据的代码
procedure TForm1.Button1Click(Sender: TObject);
var
Server: TServerMethods1Client;
DSlIST: TFDJSONDataSets;
aDataSet: TFDAdaptedDataSet;
begin
Server := TServerMethods1Client.Create(DSRestConnection1);
DSlIST := Server.ServerGetTable('select top 10 ProNo,ProName,Hst from ProductInfo', 'admin');
aDataSet:=TFDJSONDataSetsReader.GetListValue(DSlIST, 0);
MemTableEh1.Close;
MemTableEh1.LoadFromDataSet(aDataSet, -1, lmCopy, false);
MemTableEh1.Open;
FDMemTable1.Close;
FDMemTable1.AppendData(aDataSet);
FDMemTable1.Open;
end;
下面是转换代码
// 时间戳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;
用IntToHex就可以了
你取出来看数据就不正确了吧。