请问如何把一个汉字拆成两个字节(100分)

  • 主题发起人 主题发起人 lvzhong
  • 开始时间 开始时间
L

lvzhong

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟请教一下:
用这样一段程序把汉字分解成两个字节
String S1;
byte b[];
S1="大";
b=S1.getBytes();
//b[0]=-76 b[1]=-13
但是用其他的语言(如vb/delphi)得出的结果是 180 243
请问上面的程序怎样修改才能得到 这个结果。
 
const
str= '汉';
var
C1, C2: Char;
begin
C1:= Str[1];
C2:= Str[2];
end;
搞定!发分!
 
大概是因为byte是带符号类型,你改用无符号类型试试(在C++里是unsigned char)。
 
1,silicon大哥好像你写的不成
2,Huzzz老兄能给我个例程吗?
 
是不是关于中文的问题:
拭一下
String S1;
byte b[];
S1="大";
b = S1.getBytes("GBK");
String s2 = new String(b,"ISO8859_1");
b = s2.getBytes();
System.out.println(s2);
System.out.println(b[0]);
System.out.println(b[1]);
 
还是不成
 
int t1;
t1=((int)b[0])&255;//t1=180;
 
const str='汉';{AnsiString}
var ca1,ca2:char;
begin
ca1 := str[0];
ca2 := str[1];
end;
 
看来你用的是 C++ builder;
不能用byte , 要用unsigned char, 这是关键你所以会出现负数, 就是这个原因
 
多人接受答案了。
 
public static String Unicode2native(String s, String enc) {
if (s == null || s.length() == 0) {
return null;
}
int j=0;
char c;
char[] cReturn = new char[2*s.length()];
for (int i = 0;
i<s.length();
i++)
{
c = s.charAt(i);
if (c>= 0x100) {
byte[] buf = {0,0};
try {
buf = (""+c).getBytes(enc);
}
catch (Exception ex) {
}
cReturn[j++] = (char)(byte2int(buf[0]));
cReturn[j++] = (char)(byte2int(buf[1]));
}
else
{
cReturn[j++] = s.charAt(i);
}
}
return new String(cReturn, 0, j);
}
private static int byte2int(byte b) {
return ((int)b) &amp;
255;
}
 
后退
顶部