这是原来在BC中的过程,
String __fastcall TCall::HexToStr(int n)
{
String str;
char ch[10];
wsprintf(ch, "%02x", (BYTE)n);
str = ch;
return str;
}我转换成DELPHI中使用时
var
ch:array[1..10] of char;
begin
wsprintf(@ch,'%02x',byte(n);这时,会提示说 byte(n)这个参数是多余的,有什么办法吗?
上面那个过程应该是把 16进制转成string输出的
那我是否可以使用 inttohex函数来实现?谢谢
String __fastcall TCall::HexToStr(int n)
{
String str;
char ch[10];
wsprintf(ch, "%02x", (BYTE)n);
str = ch;
return str;
}我转换成DELPHI中使用时
var
ch:array[1..10] of char;
begin
wsprintf(@ch,'%02x',byte(n);这时,会提示说 byte(n)这个参数是多余的,有什么办法吗?
上面那个过程应该是把 16进制转成string输出的
那我是否可以使用 inttohex函数来实现?谢谢
解决方案 »
- 怎样拦截指定的网址??
- 如何向文本文件的末尾添加文本?
- 分布式系统中巢状数据处理问题??
- c/s結構中主從表的處理方案,請有經驗的兄弟,給出您的解決方法.高分回報
- 有关函数locate的问题?谁能帮我看一下
- 100在线求解!火急!!!!!!!!!!!!!!1
- 对象的问题
- 企业内建一个邮件系统,域名为haitian.cn,([email protected])凡是该域名内的邮件都可以发,但不可以发给其他如sohu.com,该怎么办
- 请教如何能够得到组建的WindowHandle和窗口的ThreadID?
- 如何在程序中更改数据库中表的物理结构
- indyserver控件用Writebuffer,client为什么收到的是乱码? 请教!
- 寻让DBGrid支持鼠标滚轮的最简单的方法
int wsprintf( LPTSTR lpOut, // pointer to buffer for output
LPCTSTR lpFmt, // pointer to format-control string
... // optional arguments
);
而delphi自己的声明呢:
function wsprintf(Output: PChar; Format: PChar): Integer; stdcall;
。
这个函数很强悍的
name : string; //人的姓名
age : integer; //人的年龄
str: PChar;
begin
name :='张三';
age :=23;
GetMem(str, 255);
wsprintf(str, PChar(Format('%s的年龄是%d岁', [name, age])));
messagebox(0,str,'标题',0);
FreeMem(str);
end;
我也是最近才明白的,不如直接用Format
根本没有实现可变参数!采用了这个变通的办法
还要感谢月亮:)
Windows; // 格式化输出函数 {标题} {输出格式} {输出变量列表}
procedure MessageBoxPrintf(Caption, Format: PChar; const Args: array of const);
var
OutBuff: array[0..100] of Char; // 最终输出文字
OutList: array of LongWord; // 输出变量列表
J: Integer;
begin
SetLength(OutList, 0);
for J := Low(Args) to High(Args) do // Args -> OutList
begin
case Args[J].VType of // 这里仅处理了两种类型
vtInteger : begin
SetLength(OutList, Length(OutList)+1);
OutList[High(OutList)] := Args[J].VInteger;
end;
vtString,
vtAnsiString: begin
SetLength(OutList, Length(OutList)+1);
OutList[High(OutList)] := LongWord(Args[J].VString);
end;
end;
end;
if Length(OutList) = Length(Args) then // 列表成员均合法
begin
wvsprintf(OutBuff, Format, @OutList[0]); // 转换
MessageBox(0, OutBuff, Caption, 0); // 输出
end;
end;var
cxScreen, cyScreen: Integer;begin
cxScreen := GetSystemMetrics(SM_CXSCREEN); // 屏幕宽度
cyScreen := GetSystemMetrics(SM_CYSCREEN); // 屏幕高度
MessageBoxPrintf('ScrnSize',
'The screen is %i pixels wide by %i pixels high.',
[cxScreen, cyScreen]);
end.
直接使用 format与wsprintf没有什么区别的吧? n:=strtoint(edit1.Text );
s:=format('%x',[n]);但 上面所与的 ‘%2X’与 现在的 '%x'有什么区别吗?我运行得出的结果是一样的