function CharToBinString(chs: pchar): pchar;
var
ii: Integer;
i:integer;
ch:char;
rtnpchar:pchar
begin
GetMem(Result,length(chs) + 1);
GetMem(rtnpchar,length(chs) + 1);
Result := '00000000';
for i:= 0 To length(ch) -1
begin
ch := chs[i];
for ii := 7 downto 0 do
if Ord(ch) AND (1 shl ii) > 0 then
Result[8 - ii] := '1';
strcat(rtnpchar,Result);
end;
Result:= rtnpchar;
end;
老是走到 Result[8 - ii] := '1'; 就报错。
var
ii: Integer;
i:integer;
ch:char;
rtnpchar:pchar
begin
GetMem(Result,length(chs) + 1);
GetMem(rtnpchar,length(chs) + 1);
Result := '00000000';
for i:= 0 To length(ch) -1
begin
ch := chs[i];
for ii := 7 downto 0 do
if Ord(ch) AND (1 shl ii) > 0 then
Result[8 - ii] := '1';
strcat(rtnpchar,Result);
end;
Result:= rtnpchar;
end;
老是走到 Result[8 - ii] := '1'; 就报错。
解决方案 »
- 求教:用windows.SetParent将一外部程序的某个视频预览窗口移植到自己程序的一个BUTTON上面,可这个窗口移过来后它的位置却不合适,如何
- 为了生活 -VC改到delphi
- Delphi对TXT的操作(求助)
- 两个问题,非高手莫入!
- 一个很突然的问题!搞得我不知所措!
- 请高手指教:如何实现数字键的发声程序,要求能像计算器那样,正确念出数字及结果
- ※※※※※※※ WindowsXP无法安装软件 Why? ※※※※※※※
- 请帮忙祥细解释一下接口,有百分送!
- 数据库连接已经建立,为什么我的QUERY还要再连接一次?
- WIN2000+线程+低级音频函数+CALLBACK播放问题(98/ME正常),怪。
- PacketOpenAdapter打开网卡,有的机器行 有的不行
- 关于Grid Index Out Of Range 的问题
const Const_8BIT_BINARY_TEXT : array [0..255] of AnsiString =
( '00000000', '00000001', '00000010', '00000011', '00000100', '00000101','00000110','00000111',
'00001000', '00001001', '00001010', '00001011', '00001100', '00001101','00001110','00001111',
'00010000', '00010001', '00010010', '00010011', '00010100', '00010101','00010110','00010111',
'00011000', '00011001', '00011010', '00011011', '00011100', '00011101','00011110','00011111',
'00100000', '00100001', '00100010', '00100011', '00100100', '00100101','00100110','00100111',
'00101000', '00101001', '00101010', '00101011', '00101100', '00101101','00101110','00101111',
'00110000', '00110001', '00110010', '00110011', '00110100', '00110101','00110110','00110111',
'00111000', '00111001', '00111010', '00111011', '00111100', '00111101','00111110','00111111',
'01000000', '01000001', '01000010', '01000011', '01000100', '01000101','01000110','01000111',
'01001000', '01001001', '01001010', '01001011', '01001100', '01001101','01001110','01001111',
'01010000', '01010001', '01010010', '01010011', '01010100', '01010101','01010110','01010111',
'01011000', '01011001', '01011010', '01011011', '01011100', '01011101','01011110','01011111',
'01100000', '01100001', '01100010', '01100011', '01100100', '01100101','01100110','01100111',
'01101000', '01101001', '01101010', '01101011', '01101100', '01101101','01101110','01101111',
'01110000', '01110001', '01110010', '01110011', '01110100', '01110101','01110110','01110111',
'01111000', '01111001', '01111010', '01111011', '01111100', '01111101','01111110','01111111',
'10000000', '10000001', '10000010', '10000011', '10000100', '10000101','10000110','10000111',
'10001000', '10001001', '10001010', '10001011', '10001100', '10001101','10001110','10001111',
'10010000', '10010001', '10010010', '10010011', '10010100', '10010101','10010110','10010111',
'10011000', '10011001', '10011010', '10011011', '10011100', '10011101','10011110','10011111',
'10100000', '10100001', '10100010', '10100011', '10100100', '10100101','10100110','10100111',
'10101000', '10101001', '10101010', '10101011', '10101100', '10101101','10101110','10101111',
'10110000', '10110001', '10110010', '10110011', '10110100', '10110101','10110110','10110111',
'10111000', '10111001', '10111010', '10111011', '10111100', '10111101','10111110','10111111',
'11000000', '11000001', '11000010', '11000011', '11000100', '11000101','11000110','11000111',
'11001000', '11001001', '11001010', '11001011', '11001100', '11001101','11001110','11001111',
'11010000', '11010001', '11010010', '11010011', '11010100', '11010101','11010110','11010111',
'11011000', '11011001', '11011010', '11011011', '11011100', '11011101','11011110','11011111',
'11100000', '11100001', '11100010', '11100011', '11100100', '11100101','11100110','11100111',
'11101000', '11101001', '11101010', '11101011', '11101100', '11101101','11101110','11101111',
'11110000', '11110001', '11110010', '11110011', '11110100', '11110101','11110110','11110111',
'11111000', '11111001', '11111010', '11111011', '11111100', '11111101','11111110','11111111'
);
var
iLen: Integer;
I: Integer;
begin
Result := '';
iLen := Length(Value);
if iLen = 0 then Exit;
SetLength(Result, iLen * 8);
for I := 0 to iLen - 1 do
begin
Move( PAnsiChar(Const_8BIT_BINARY_TEXT[Ord(Value[I + 1])])^
, PAnsiChar(LongWord(PAnsiChar(Result)) + I * 8 )^
, 8
);
end;
end;
GetMem(Result,length(chs) + 1);
GetMem(rtnpchar,length(chs) + 1);
Result := '00000000';这几行代码挺有创意的……执行到第三句的时候,不但第一句分配的内存白分配了造成了内存泄露,而且Result还指向了处于常量段的内存。常量段的内存是只读的,写的话自然就报错了
另外这代码效率也够低的了
var
ii: Integer;
i:integer;
ch: AnsiChar;
iLen: Integer;
begin
Result := Nil;
iLen := StrLen(Chs);
if iLen = 0 then Exit; GetMem(Result, iLen * 8 + 1);
Result[iLen * 8] := #0;
FillChar( Result^, iLen * 8, ord('0')); for i:= 0 To iLen -1 do
begin
ch := chs[i];
for ii := 7 downto 0 do
if (Ord(ch) AND (1 shl ii)) > 0 then
Result[(i + 1) * 8 - ii] := '1';
end;
end;
const CPHex : array[$0..$f]of PAnsiChar = (
'0000', '0001', '0010', '0011',
'0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011',
'1100', '1101', '1110', '1111' );
var
i : Integer;
b : Byte;
pRet : PInteger;
begin
SetLength(Result, Size shl 3);
pRet := PInteger(Result);
for i:=0 to Size-1 do
begin
b := Byte( PAnsiChar(@Buffer)[i] );
pRet^ := PInteger(CPHex[b shr 4])^;
Inc(pRet);
pRet^ := PInteger(CPHex[b and $f])^;
Inc(pRet);
end;
end;