不知在delphi中是怎样的转换,如456用EncodeUniCode转成USC2就是0034 0035 0036的小端方式,而我现在要大端方式即3400 3500 3600的方式,不知怎样的转,delphi中没有现成的函数样的。网上只能查到C的转换方式,也看不懂,不知是对与错,但也不知怎样转为delphi的方式。C的方式如下:
void convertToLittleEndian(unsigned int *data)
{
*data = ((*data & 0xff000000) >> 24)
| ((*data & 0x00ff0000) >> 8)
| ((*data & 0x0000ff00) << 8)
| ((*data & 0x000000ff) << 24)
}
void convertToLittleEndian(unsigned int *data)
{
*data = ((*data & 0xff000000) >> 24)
| ((*data & 0x00ff0000) >> 8)
| ((*data & 0x0000ff00) << 8)
| ((*data & 0x000000ff) << 24)
}
解决方案 »
- 求一思路
- 如何可以左键单击弹出menu菜单
- 组件的资源占用
- 在读写串口的程序中,这个函数起什么作用?
- 请问 dbgrideh 控件的 STFilter 如何使用 ????????????? 急!!!!!!!
- 请问:字符类型判断
- access98和access2000
- My E_mail : [email protected], who tell me the E_mail address's POP3/SMTP server Nmae ?
- 谁能帮忙贴个MODEM的AT指令集的贴子,或告知网点,不胜感激!
- 这个api函数的第三个参数到底要定义一个什么变量阿
- 怎样保存文件???
- delphi 添加字段报错
var
p,p2:pbyte;
b:byte;
begin
p:=pbyte(@i32);
p2:=p; inc(p2,4);
b:=p^; p^:=p2^; p2^:=b; inc(p); p2:=p; inc(p2);
b:=p^; p^:=p2^; p2^:=b;
end;
//这段代码是直接根据你的C代码翻译的
procedure convertToLittleEndian(var int : DWORD);
begin
int := ((int and $ff000000) SHR 24)
or ((int and $00ff0000) SHR 8)
or ((int and $0000ff00) SHL 8)
or ((int and $000000ff) SHL 24);
end;//这个代码就不说了,上面的函数搞半天,其实就是一行指令.
function convertToLittleEndian2(dw : DWORD) : DWORD;
asm
BSWAP EAX
end;procedure TForm1.FormCreate(Sender: TObject);
var
n1 , n2 : DWORD;
begin
n1 := $12345678;
n2 := $12345678;
convertToLittleEndian(n1);
n2 := convertToLittleEndian2(n2);
if n1=n2 then
Caption := 'OK';
题外话,楼主用这个函数转换,其实不是很得体
var
S : UnicodeString;
begin
S := '456'; //这句执行后, S所指向的内存 本来就是 34 00 35 00 36 00 不知道这个结果是否是你想要的哦
function StrtoUnicode(Str:string):string;
var
s:string;
i,j,k:Integer;
a:array [1..1000] of Char;
begin
s:='';
StringToWideChar(Str,@(a[1]),500);
i:=1;
while ((a[i]<>#0) or (a[i+1]<>#0)) do
begin
k:=Integer(a[i]); //如果为大端这里为K,如果为小端这里为J
j:=Integer(a[i+1]); //如果为大端这里为J,如果为小端这里为K
s:=s+copy(Format('%X',[k*$100+j+$10000]),2,4);
i:=i+2;
end;
Result:=s;
end;