誰知道:16进制相加的函數﹐以及16進制轉換成字符串的函數
解决方案 »
- 在线等待:delpi idudp(c/s)如何获取服务端文件列表,存入到listview或者其他控件中。不用FTP。
- 请教一个图象缩放 的问题
- ADO如何连到ACCESS数据库文件(已建有工作组安全机制)
- listbox的小问题
- TServerSocket发送的Char长度与TClientSocket收到的Char长度不相等,可能是什么原因?
- delphi中用什么控件来制作和打印报表比较好?
- delphi迭代的收敛
- 谁要INTRAWEB的技术手册!免费赠送
- 请教,什么地方有InstallSheild专业版?(急用)谢谢!
- 如用一TADOQuery连接一些动态表,我要进行新增、修改等操作,该怎么做?分数将另加上
- 用bPL包,为什么还要DCU文件?没有怎么办?
- 载线等待-------奇怪,我设置什么?EDIt控件不能输入空格?为什么呀?
neg: Boolean; max: Integer): Integer;
// s = 要转换的字符串
// base = 源字符串进制数
// neg = 是否为负数// max = 要转换的最大数//
// 用法:
// i:= StrToNum (''00101101'', 2, false, MaxInt);
// i:= StrToNum (''002D'', 16, false, MaxInt);
// i:= StrToNum (''-45'', 10, true, MaxInt);
// i:= StrToNum (''ZZ'', 36, true, MaxInt);
//
var
negate, done: Boolean;
i, len, digit, mmb: Integer;
c: Char;
mdb, res: Integer;
begin
res:= 0; i:= 1; digit:= 0;
if (base >= MinBase) and (base <= MaxBase) then
begin
mmb:= max mod base;
mdb:= max div base;
len:= Length (s);
negate:= False;
while (i <= len) and (s[i] = ' ') do Inc (i);
if neg then
begin
case s[i] of
'+': Inc (i);
'-': begin Inc (i); negate:= TRUE; end;
end; (* CASE *)
end; (* IF neg *)
done:= len > i;
while (i <= len) and done do
begin
c:= Upcase (s[i]);
case c of
'0'..'9': digit:= ORD(c) - 48;
'A'..'Z': digit:= ORD(c) - 55;
else
done:= FALSE
end; (* CASE *)
done:= done and (digit < base);
if done then
begin
done:= (res < mdb) or ((res = mdb) and (digit <= mmb));
IF done then
begin
res:= res * base + digit;
Inc (i);
end; (* IF done *)
end; (* IF done *)
end; (* WHILE *)
if negate then res:= - res;
end; (* IF done *)
Result:= res;
end;
function NumToStr (num, len, base: Integer; neg: Boolean;
fill: char): string;
// num = 要转换的数
// len = 生成字符串的最小长度// base = 目标数的进制数 2 = 二进制
// neg = 是否允许负数// fill = 填充字符用于补满字符串长度//
// 用法:
// NumToStr (45, 8, 2, false, ''0'') > ''00101101''
// NumToStr (45, 4, 8, false, ''0'') > ''0055''
// NumToStr (45, 4, 10, false, '' '') > '' 45''
// NumToStr (45, 4, 16, false, ''0'') > ''002D''
// NumToStr (45, 0, 36, false, '' '') > ''19''
//
var
s: string;
digit: Integer;
begin
num:= ABS (num);
if ((base >= MinBase) and (base <= MaxBase)) then
begin
s:= '';
repeat
digit:= num mod base;
if digit < 10 then
Insert (CHR (digit + 48), s, 1)
else
Insert (CHR (digit + 55), s, 1);
num:= num div base;
until num = 0;
if neg then Insert ('-', s, 1);
while Length(s) < len do Insert (fill, s, 1);
end;
Result:= s;
end;
var
i: integer;
begin
i:= $10 + $10;//可以直接向加
showmessage(inttostr(i));
showmessage(inttohex(i, 2));
end;其中inttohex就是16進制轉換成字符串的函數,后面的参数2表示字符串的长度。
StrToInt('$de');
Str: String;
Count: Integer;
begin// 十六进制 $22 转换为字符串
FmtStr(Str, '%.5x', [$22]);
ShowMessage(Str);
FmtStr(t, '%.*x', [5,$22]);
ShowMessage(Str);
IntToHex($22, 5);
ShowMessage(Str);
//
//16 进制数相加
FmtStr(t, '%.*x', [5,$22+$35]);
ShowMessage(Str);
//
//16 进制字符串相加
Count := StrToIntDef('$'+'0F', 0) + StrToIntDef('$'+'36', 0);
FmtStr(t, '%.*x', [5,$22]);
ShowMessage(Str);
//
end;
Str: String;
Count: Integer;
begin// 十六进制 $22 转换为字符串
FmtStr(Str, '%.5x', [$22]);
ShowMessage(Str);
FmtStr(t, '%.*x', [5,$22]);
ShowMessage(Str);
IntToHex($22, 5);
ShowMessage(Str);
//
//16 进制数相加
FmtStr(t, '%.*x', [5,$22+$35]);
ShowMessage(Str);
//
//16 进制字符串相加
Count := StrToIntDef('$'+'0F', 0) + StrToIntDef('$'+'36', 0);
FmtStr(t, '%.*x', [5,$22]);
ShowMessage(Str);
//
end;
var
handle1:integer;
len1:integer;
iRead: Integer;
buffer:pchar;
i,s1,s2:integer;
begin
up:=0;
Handle1 := FileOpen(FirstFile, fmOpenRead); //文件读入内存,
Len1:= FileSeek(Handle1,0,2);
FileSeek(Handle1,0,0);
Buffer := Pchar(AllocMem(Len1 + 1));
iRead := FileRead(Handle1, Buffer^, Len1);
FileClose(Handle1);
try
for i:=0 to iRead-1 do //取数据直接用buffer[i]计算就是16进制
if ord(buffer[i])=0 then
begin
s1:=ord(buffer[i+1]); //去件转整计算的如果要写入用filewrite
s2:=ord(buffer[i+2]);
if s1<s2 then
begin
up:=i;
exit;
end;
end;
finally
freemem(buffer);
end;
end;
不知你的16進制轉換成字符串是将数字转换为字符串,还是要读文件里的数据如果是前边
inttostr(ord(buffer[i+1]));如果是后面就不会了