定义:
InputBuffer : Array [0..1024] of Char;
dwNumberOfBytesRead : integer;调用:
AddToMemo(InputBuffer,dwNumberOfBytesRead);AddToMemo的定义为:AddToMemo(Str: PChar; Len: Dword);
问题:
我想在AddToMemo函数体内,对传过来的Str:Pchar的每一个元素进行读取,由于程序调用AddToMemo(InputBuffer,dwNumberOfBytesRead);时,传入的参数为Char数组和长度,而Char数组中的元素实际上是Ascii码,但是在AddToMemo中却被转换成了Str:Pchar类型,请问我如何能够在AddToMemo函数体内取得数组的每一个元素的Ascii码。
InputBuffer : Array [0..1024] of Char;
dwNumberOfBytesRead : integer;调用:
AddToMemo(InputBuffer,dwNumberOfBytesRead);AddToMemo的定义为:AddToMemo(Str: PChar; Len: Dword);
问题:
我想在AddToMemo函数体内,对传过来的Str:Pchar的每一个元素进行读取,由于程序调用AddToMemo(InputBuffer,dwNumberOfBytesRead);时,传入的参数为Char数组和长度,而Char数组中的元素实际上是Ascii码,但是在AddToMemo中却被转换成了Str:Pchar类型,请问我如何能够在AddToMemo函数体内取得数组的每一个元素的Ascii码。
解决方案 »
- 插入数据线没有打开usb存储设备选项
- TEdit1.text:=TComboBox1.Text+'卫生局'
- indy的idtcpclient报“socket error 10054 ”错误,请问各位有没有碰到过?
- 主明细表更新问题
- 简单的问题,关于移动窗体的
- 关于ehlib的使用
- FastReport2.47如何才能正确显示整形数据项?
- 请教各位高手,我做了一个应用程序,在程序中已经实现数据库(SQL Server)备份,但是数据恢复时提示数据库正在使用,请问怎样控制SQL Serv
- TForm的OnClose事件和OnDestroy事件有何区别?
- imDos_Headers=(IMAGE_DOS_HEADER *)pBasePointer;转换为:imDos_Headers := IMAGE_DOS_HEADER(pBasePointer);出错
- 神奇的问题,DBgrid滚动条丢失(请高手帮忙)!
- delphi开发游戏时,你们都用什么引擎呀?
var
InputBuffer : array [0..6] of Char;
dwNumberOfBytesRead : integer;procedure AddToMemo(Str: PChar; Len: Dword);
var
TempByteArr: array of Byte;
I : integer;
begin
SetLength(TempByteArr, Len);
TempByteArr := Pointer(Str);
for I := 0 to Len-1 do
Showmessage(InttoStr(TempByteArr[I]));
end;
///////////////////以下是测试//////////////
procedure TForm1.Button1Click(Sender: TObject);
begin
InputBuffer[0] := 'a';
InputBuffer[1] := 'b';
InputBuffer[2] := 'c';
InputBuffer[3] := 'a';
InputBuffer[4] := 'b';
InputBuffer[5] := 'c';
InputBuffer[6] := 'd';
dwNumberOfBytesRead := Length(InputBuffer);
AddToMemo(InputBuffer,dwNumberOfBytesRead);
end;
第二种:
type
TArrByte = array of Byte;var
InputBuffer : array [0..6] of Char;
dwNumberOfBytesRead : integer;procedure AddToMemo(Str: PChar; Len: Dword);
var
I : integer;
begin
for I := 0 to Len-1 do
Showmessage(InttoStr(TArrByte(Str)[I]));
end;
///////////////////以下是测试//////////////
procedure TForm1.Button1Click(Sender: TObject);
begin
InputBuffer[0] := 'a';
InputBuffer[1] := 'b';
InputBuffer[2] := 'c';
InputBuffer[3] := 'a';
InputBuffer[4] := 'b';
InputBuffer[5] := 'c';
InputBuffer[6] := 'd';
dwNumberOfBytesRead := Length(InputBuffer);
AddToMemo(InputBuffer,dwNumberOfBytesRead);
end;
procedure AddToMemo(Str: PChar; Len: Dword);
var
I : integer;
begin
for I := 1 to Len do
Showmessage(InttoStr(Byte(StrPas(Str)[I])));
end;
p : PByte;
i : integer;
begin
p := str;
for i := 0 to len - 1 do
begin
showmessage(inttostr(p^));
inc(p);
end;
end;
var
p : array[0..3] of char;
s : string;
begin
p[0] := 'a';
p[1] := #0;
p[2] := 'b';
p[3] := #0;
setlength(s, 4);
copymemory(@s[1], @p[0], 4);
ShowMessage(strpas(p)[3]);
ShowMessage(s[3]);
end;
呵呵
上层楼我的p := @str;不对,应该是:
LongWord(p) := LongWord(str);
var
p : PByte;
i : integer;
begin p := @str; for i := 0 to len - 1 do
begin
Memo1.Lines.Add(IntToStr(Ord((p^))));
inc(p,1);
end;end;这段代码是参考Ysai在四楼所写的代码,实际上传入str的值应该是类似于"02 30 30 32 37 32 44"(中间无空格)这样的内容,但是使用这段代码得出的却不是刚才的Ascii码,而是一些其他的大于127的内容,这个我不太明白了。
p := str;
没带@
p是指针,str本就是指针,你还取它地址就错了.
如果p := str;报编译错误(与编译选项有关),那就改为
p := Pointer(str);