GBK编码如何转换成十六进制 ?

dxbjeremy 2006-07-05 05:58:36
GBK转换成十六进制的代码怎么写,谢谢大家。还有 GBK转换成二进制? GBK转换成 UCS2? GBK转换成纯ASCII字符串?这些转换编码代码如何写,谢谢大家了。
...全文
1456 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxbjeremy 2006-07-25
  • 打赏
  • 举报
回复
对一个字符串这样调换我也写好了,但最后存到内存不知道是不是ucs2码,麻烦加下我的QQ 19982375,帮下忙,不盛感激。
柯本 2006-07-25
  • 打赏
  • 举报
回复
最笨的方法,作一个循环就可以了
var
s:string;
i:integer;
b:char;
begin
s:=#$ba#$4e#$1f#$75#$93#$7d#$df#$71; // unicode: ba 4e 1f 75 93 7d df 71
i:=1;
while i<length(s) do
begin
b:=s[i];
s[i]:=s[i+1];
s[i+1]:=b;
i:=i+2;
end;
//结果s为:4e ba 75 1f 7d 93 71 df
dxbjeremy 2006-07-25
  • 打赏
  • 举报
回复
人生經營 四个字 的unicode编码和 ucs2编码如下:
unicode: ba 4e 1f 75 93 7d df 71
ucs2是unicode两两换位,就是4e ba 75 1f 7d 93 71 df
问下在内存中怎么调换,unicode转换ucs2这个函数的代码怎么写,请大家帮忙!特请keiy()帮忙,谢谢!
dxbjeremy 2006-07-17
  • 打赏
  • 举报
回复
C++的程序: strcpy(stSubmit.szMsgContent,pszMsgContent);
Delphi的程序:StrPCopy(SGIPSubmit.Submit.MessageContent, SubmitRecord.F_MessageContent);
对短信内容就做了这个处理,其他也没做什么处理了,结果是C++程序的发送繁体手机收到是繁体,能看清,Delphi程序发的同样繁体字手机收到的是乱码。有没有什么办法帮我想想,谢谢。加下我的QQ吧,帮帮忙!实在找到解决方法了。
柯本 2006-07-17
  • 打赏
  • 举报
回复
以前也是帮别人写过发短信的程序(用C++写的),也是用USC2,没问题,不过没有用到繁体
不过,繁体也有多种编码,有GB编码的繁体,有unicode编码的繁体,有BIG5的繁体,你可以看一下收到的乱码的编码,是否是上述之一,在win2k/xp系统下,前两种编码可以显示(但不能混在一起),后一种肯定是乱码.你可以发一个字如:"机"(機),看收到的代码是什么:
GBK:$BBFA
UCS2:$3A67
GB繁体:$9943
UCS2繁体:$5F6A
BIG5:$BEF7




dxbjeremy 2006-07-17
  • 打赏
  • 举报
回复
我在用delphi写sgip1.2短信网关协议程序,发送繁体字变乱码,开始用GBK码,会变乱码,现在想用USC2码试下,用你的这种转换后也是不行。你写过这个程序吗?
柯本 2006-07-17
  • 打赏
  • 举报
回复
如果是C++的程序可以,delphi应该同样可以,只不过,如果对编码方式不是很熟,最好不要用delphi的string类型(它会自动转换Unicode/GBK),建议用PCHAR/PWIDECHAR,这样,与C++的程序完全可以做到兼容
柯本 2006-07-14
  • 打赏
  • 举报
回复
我上面不是已经写了吗?
dxbjeremy 2006-07-14
  • 打赏
  • 举报
回复
GBK编码如何转换成UCS2码?具体怎么写?麻烦再帮忙!
柯本 2006-07-14
  • 打赏
  • 举报
回复
上面的
s1:=s;
由delphi自动调用StringToWideChar将GBK的s转面UCS2的s1,你也可以自己调用StringToWideChar将GBK字串转成USC2字串,这些都是delphi中自带的,没有必要自己再写一个
柯本 2006-07-14
  • 打赏
  • 举报
回复
我不明白, 你的USC2ToGBK就是将USC2字串转成GBK的字串,其它在delphi中它就会自动转换的.就如我的:
var
s:string;
s1:widestring;
...
s:='你好'; //GBK字串
s1:=s; // USC2字串
dxbjeremy 2006-07-14
  • 打赏
  • 举报
回复
你是把 string型转换成 GBK和USC2, 这两中之间怎么转换?你看我上面写的这个USC2ToGBK方法挺复杂的,没你说的这么简单。
dxbjeremy 2006-07-07
  • 打赏
  • 举报
回复
keiy()你好,很感谢你的热心,我现在是写一个短信网关程序,发送繁体字变成乱码,我的QQ:19982375 ,或MSN: dengx_b@hotmail.com,麻烦加我下,谢谢。
柯本 2006-07-07
  • 打赏
  • 举报
回复
更完整的程序:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
x,y:word;
s1:widestring;
begin
s:='啊';
x:=ord(s[1])*256+ord(s[2]); //结果为$B0A1,即为s的gbk码
s1:=s;
y:=ord(s1[1]); //结果为$554A,把它转成$4A55,就是'啊'的UCS2码
y:=swap(y);
ShowMessage('啊的GBK码为:$'+inttohex(x,4));
ShowMessage('啊的UCS2码为:$'+inttohex(y,4));
end;
柯本 2006-07-07
  • 打赏
  • 举报
回复
我上面已写过了:GBK转换成 UCS2,可将S直接赋给WideString变量或用StringToWideChar
再给你个例子:
var
s:string;
x,y:word;
s1:widestring;
begin
s:='啊';
x:=ord(s[1])*256+ord(s[2]); //结果为$B0A1,即为s的gbk码
s1:=s;
y:=ord(s1[1]); //结果为$554A,把它转成$4A55,就是'啊'的UCS2码
end;
dxbjeremy 2006-07-07
  • 打赏
  • 举报
回复
function UCS2toGB(P: Pointer; Size: Integer = 70): string;
var
PP: PByte;
I: Integer;
ByteA: Byte;
ByteB: Byte;
P1: PByte;
P2: PByte;
Pw: PWideChar;
// s:string;
begin
PP := PByte(P);
I := 0;
while (I < Size) do
begin
P1 := PP;
ByteA := PP^;
Inc(PP);
P2 := PP;
ByteB := PP^;
Inc(PP);
P1^ := ByteB;
P2^ := ByteA;
Inc(I);
end;
Pw := PWidechar(P);
Result := Pw;
end;
这是USC2转换成GBK的代码,大家帮忙把这个算法倒写下看行不行,谢谢了!
柯本 2006-07-06
  • 打赏
  • 举报
回复
GBK转成二字节整型:
var
s:string;
x:word;
s1:widestring;
begin
s:='啊';
x:=ord(s[1])*256+ord(s[2]); //结果为$B0A1,即为s的gbk码
end;
至于GBK转换成十六进制,二进制,有个概念问题,你是要把它变成十六进制,二进制字符串还是其它(本身计算机所有存储都是二进制的)
如果要转成十六进制字串,可用inttostr(x,4),要转二进制,也是最基本的算法(网上找一下有N多)
GBK转换成 UCS2,可将S直接赋给WideString变量或用StringToWideChar
GBK转换成纯ASCII字符串?不明白,两个不同的编码,你要怎么转?
dxbjeremy 2006-07-06
  • 打赏
  • 举报
回复
自己顶!
dxbjeremy 2006-07-06
  • 打赏
  • 举报
回复
gbk编码转换成UCS2编码的代码怎么写?

5,388

社区成员

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

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