有一个函数
writeData(data:pchar,len:word)这个函数实现这样的功能:把data中len字节长的数据写到ic卡中。
这个函数原形是c语言的。我如何实现把word类型的数据的地址,转换成char类型的地址。这样一个word型的数据,它的地址转换成char型后,长度也是2字节。在函数内部读取两字节,把数据读出来了。如果直接把word的数据轮换成char的,长度最大可能是5位。
在C中可以实现。但在delphi中如何实现。

解决方案 »

  1.   

    word类型的数据的地址?地址都是4位的,怎么能转化为两位呢?你是说将Word的数据用Char来保存吧。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    可以通过用c写一个动态库用delphi调用呀
      

  3.   

    我说的不清楚。是我想把的word的数据用char来保存,但得用pchar指针,传到函数中。
    多谢lxpbuaa(桂枝香在故国晚秋) 指正。
      

  4.   

    var
      w:Word;WriteData(PChar(@w),2);
      

  5.   

    在调用WriteData函数出错,这个函数是 ic卡读写器厂家的。
    直接传字符串没有没有问题。
      

  6.   

    这样哦,那这么弄吧:
    var
      W,W1: Word; //它占用2字节,因此P最后应为3位(包含结尾的一个#0)
      P: PChar;
    begin
      W := 65;
      //写入:
      GetMem(P, SizeOf(W)+1);
      Move(W, P[0], 2);
      ShowMessage(P);  //读出
      Move(P[0], W1, 2);
      ShowMessage(IntToStr(W1));
      FreeMem(P);
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  7.   

    这样哦,那这么弄吧:
    var
      W,W1: Word; //它占用2字节,因此P最后应为3位(包含结尾的一个#0)
      P: PChar;
    begin
      W := 65;
      //写入:
      GetMem(P, SizeOf(W)+1);
      Move(W, P[0], 2);
      ShowMessage(P);
      //调用writeData:
      writeData(P, 2);  //读出
      Move(P[0], W1, 2);
      ShowMessage(IntToStr(W1));
      FreeMem(P);
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  8.   

    可能是因为字节次序问题才出错var
      w:Word;w:=$1234; //在内存中的排列为 34H,12H,转换为 PChar 后次序未变
    // 而你的函数可能需要这样的数据 12H, 34H
    // 则先将 w 交换一下字节位置w:=((w and $00FF) shl 8) or ((w and $FF00) shr 8);
    WriteData(PChar(@w),2);