字符串的小问题!!!在线等!!!

attar 2005-05-16 09:36:57
要编写一个读写IC卡的程序,已有写卡函数
Function AT45D_WriteChar(Page: Word; Addr: Word; Length: Word; WriteData: Byte): Word;
问题一:我要将字符串 0f, 0f, 'setup1'写进去,其中0f是十六进制数,我应该怎么把这十六进制数和'setup1'连接起来?
问题二:函数中的WriteData是Byte型的,我怎么把问题一中已经连接好的一个字符串赋值给WriteData?需要类型转换吧,怎么做?

急,多谢各位了!!!
...全文
127 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
何鲁青 2005-05-16
  • 打赏
  • 举报
回复
WriteData是byte类型,根本就放不下字符串的...
attar 2005-05-16
  • 打赏
  • 举报
回复
我没说清楚,函数前面的值我都明白了,可以这么写
AT45D_WriteChar(0,0,8,WriteData)
关键是WriteData应该怎么写?难道写成AT45D_WriteChar(0,0,8,#0#0'setupl')么?
firstshine 2005-05-16
  • 打赏
  • 举报
回复
第一:应该是#0#0'setupl'
第二:不清楚你这个函数每个参数的意义,接口手册里面应该有说明才对啊
lavende 2005-05-16
  • 打赏
  • 举报
回复
UP
jadeluo 2005-05-16
  • 打赏
  • 举报
回复
WORD AT45D_WriteChar(
WORD _wPage,
WORD _wAddr,
WORD _wLength,
BYTE *_bWriteData
);

按这个函数原型, 对应的Delphi函数应该申明为:

function TForm1.AT45D_WriteChar(Page: Word; Addr: Word; Length: Word; WriteData: PChar): Word;


调用时的代码可以这样写:

var
S: ShortString;
begin
S := #$0F#$0F'setup1';
AT45D_WriteChar(0, 0, Ord(S[0]), @s[1]);
end;

xwhope 2005-05-16
  • 打赏
  • 举报
回复
UP
godear 2005-05-16
  • 打赏
  • 举报
回复
byte(S[x]) S为字符串
attar 2005-05-16
  • 打赏
  • 举报
回复
多谢解答,但是HexToBin(@hexstring[1],@tempstring[1],length(hexstring));//tempstring中是转化后的字符串 这句有问题?
另附上函数说明,我就是想将 0f 0f setup1 这8个字符写到第0页,地址0开始的位置,咋写呢?折腾好几天了,急死了!!!
AT45D_WriteChar
AT45D_WriteChar 函数将一串字符写入到AT45D系列卡片的存储区内。此函数受MCS_SetStringMode影响。

WORD AT45D_WriteChar(
WORD _wPage,
WORD _wAddr,
WORD _wLength,
BYTE *_bWriteData
);

参数
_wPage
指定要改写的卡片存储区的页地址,地址定义参见AT45D_ReadChar。

_wAddr
指定要改写的页地址内的字节起始地址。

_wLength
指定要写入的字符串长度。

由于AT45D系列卡片每页的存储量为264字节,因此当写入的长度超过页长时,页地址不变但字节地址会回绕到0。

_bWriteData
字符型指针。应用程序在调用此函数前,将要写入到卡片内的字符串存于_bWriteData指针内,该串的内容会覆盖卡片_wAddr地址起的_wLength个字节。

返回值
如果函数调用成功,返回值为0。

如果函数调用失败,返回值不为0。如需得到错误描述,请调用MCS_ErrorMsg。

说明
此函数将_bWriteData指向的字符串写入到卡片的_wPage页的_wAddr字节地址,共_wLength个字节。为了保证写入的正确性,应用程序应确保_bWriteData指针指向的内容及长度。在HEXADECIMAL模式下_bWriteData指向的字符串应为_wLength个字节;在ASCIISTRING模式下_bWriteData指向的字符串应为(_wLength * 2)个字节。
何鲁青 2005-05-16
  • 打赏
  • 举报
回复
Function AT45D_WriteChar(Page: Word; Addr: Word; Length: Word; WriteData: Byte): Word;
///////刚才看了一下这个函数,感觉应该是这样的,length规定了要传输数据的长度,而WriteData是第一个数据的地址或者数据,但是不应该是byte类型的,它应该是Pchar或者是integer类型的。或者它本身有一些自定义的寻址的方法,搂住友没有这个函数的说明那,贴出来看看先...
何鲁青 2005-05-16
  • 打赏
  • 举报
回复
指针的话也要integer才可以,全当你的WriteData可以保存一个指针吧;你可以这样来做...
1、用function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer来把十六进制的数转化成字符串类型的,大体的函数遵照下面的思路:
var tempstring,hexstring:string;

begin
hexstring:='0f';//十六进制的0f
HexToBin(@hexstring[1],@tempstring[1],length(hexstring));//tempstring中是转化后的字符串
tempstring:=tempstring+'setup1';//添加上'setup1',字符串构造完成
WriteData:=integer(@tempstring);
end;
xtaotao 2005-05-16
  • 打赏
  • 举报
回复
把字符串分解为多个Byte,用循环一个个写过去.

不知行不行?
attar 2005-05-16
  • 打赏
  • 举报
回复
是呀,所以要转换类型,把string类型的指针送过去,应该怎么办呢?多谢了!!!急啊!!!
还有问题一咋解决?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧