我有一個像'10011011001'這樣的字串,我希望將此字串轉換為十六進制字串,最好的方法是什么。
uj5u.com熱心網友回復:
OP澄清了輸入字串的長度<= 32。那么問題就變得更簡單了。
有許多可能的解決方案。其中之一是:
function BinStrToHex32(const S: string): string;
begin
var LValue: UInt32 := 0;
for var i := 1 to S.Length do
case S[i] of
'0', '1':
LValue := LValue shl 1 or Ord(S[i] = '1');
else
raise Exception.CreateFmt('Invalid binary number: %s', [S]);
end;
Result := IntToHex(LValue);
end;
恕我直言,它非常易讀并執行一些驗證。(對于獎勵積分,您可以添加溢位檢查。)
如果輸入字串長度沒有限制,那么我會做這樣的事情:
function BinStrToHexStr(const S: string): string;
const
HexDigits: array[0..$F] of Char = '0123456789ABCDEF';
begin
if S.Length mod 8 <> 0 then
raise Exception.Create('Invalid binary string.');
SetLength(Result, S.Length div 4);
var LNibble: Byte := 0;
var c := 0;
for var i := 1 to S.Length do
begin
LNibble := LNibble shl 1 or Ord(S[i] = '1');
if i mod 4 = 0 then
begin
Inc(c);
Result[c] := HexDigits[LNibble];
LNibble := 0;
end;
end;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/509892.html
下一篇:禁用面板上的所有物件/組件
