我試圖為每個缺失的位元組陣列元素添加 00,為了更好地解釋它,如果lenght一個陣列是 20 并且字串只填充 9 個空格(顛倒),我需要其余 11 個空格是00. 一個例子會更好地解釋它。
到目前為止,這是我的代碼:
var
dateAndTimeOfIssue, taxPayerId: Tarray<Byte>;
dateOfIssueMS, DOIReversed: int64;
begin
dateOfIssueMS := StrToInt64(MilliSecondsBetween(f.InvoiceRequest.dateAndTimeOfIssue,
UnixDateDelta).ToString);
ReverseBytes(@(dateofIssueMS), @(DOIReversed), SizeOf(dateofIssueMS));
setLength(dateAndTimeOfIssue, 8);
Move(DOIReversed, dateAndTimeOfIssue[0], SizeOf(DOIReversed));
// result of this byte array casted into hex string is
'0000313B23048B31' // which is correct
setlength(taxPayerId, 20);
taxPayerId := TEncoding.UTF8.GetBytes(F.MyCompany.taxpayerId);
// result of this byte array casted into hex string is
'303231313331363832' // and I need it to be
'0000000000000000000000303231313331363832'
我實際上想要實作的是將多個位元組陣列添加到一個將發送到智能卡的最終陣列中,例如,這些只是這里的 2 個陣列(我使用十六進制字串僅表示位元組的樣子,因為我有一個完整的例子,它應該如何)。APDU 命令很奇怪,提前致謝。
uj5u.com熱心網友回復:
實際的納稅人 ID 似乎是 9 個字符:'021131682'。對于 20 個位元組的總長度,ArrTaxPayerId陣列中首先需要 11 個空位元組。因此,使用BufferSize=20,StrTaxPayerId='021131682'您可以設定 的初始長度ArrTaxPayerId:
SetLength(ArrTaxPayerId, BufferSize - Length(StrTaxPayerId);
現在將保存 11 個空位元組。然后將它與實際納稅人 ID 的位元組連接起來:
ArrTaxPayerId := ArrTaxPayerId TEncoding.UTF8.GetBytes(StrTaxPayerId);
然后最后一步是將 20 位元組轉換為您已經擁有代碼的ArrTaxPayerId十六進制表示BinToHex()。
當我嘗試上述方法時,我得到了結果 0000000000000000000000303231313331363832
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315597.html
