VC->java

chaoxy21cn 2007-12-07 05:27:27
int Calc_crc(unsigned char len,
unsigned char *in, unsigned char *out)//CRC
{
int i, j, stat;
unsigned int crc;
stat=0x31e3;

// CRC16 // crc = 0xC78C; // bit-swapped 0x31E3
crc = 0x31E3;
for (j=0;j<len; j++)
{
crc=crc^((unsigned int)in[j]<<8);
for (i=0;i<8;i++)
{
if (crc&0x8000)
crc=(crc<<1)^0x1021;
else crc=crc<<1;
}
}
out[0]=(unsigned char)(crc>>8);
out[1]=(unsigned char)crc;
if (crc)
stat=1;

return (stat);
}
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoxy21cn 2007-12-14
  • 打赏
  • 举报
回复
这几天忙晕了.给份了.呵
yanhan0615 2007-12-11
  • 打赏
  • 举报
回复
好几天没来CSDN,这么容易的分都没接上
qybao 2007-12-10
  • 打赏
  • 举报
回复
我算出来是AE31,跟你的VC结果一样啊

public static void main(String[] args) {
byte[] in = {(byte)0x5A,(byte)0x01,(byte)0x1A};
byte[] out = new byte[2];
int stat = calc_Crc(3, in, out);
for (int i=0; i<out.length; i++) {
System.out.printf("%02X", new Object[]{new Byte(out[i])});
}
System.out.println();
}

static int calc_Crc(int len, byte[] in, byte[] out) {
int i, j, stat;
char crc;

stat = 0x31e3;
crc = 0x31E3;

for (j=0; j<len; j++) {
crc = (char)(crc^(in[j]<<8));

for (i=0; i<8; i++) {
if ((crc & 0x8000) > 0) crc = (char)((crc<<1)^0x1021);
else crc <<= 1;
}
}

out[0]=(byte)(crc>>8);
out[1]=(byte)crc;

if ((int)crc > 0) stat=1;

return stat;
}



输出结果
AE31

LZ的方法也没什么大问题,你把
return new String(out,"gbk");
改成
return new String(out);
就可以了


chaoxy21cn 2007-12-07
  • 打赏
  • 举报
回复
多谢,阿宝兄
我自己也写一个,算出的结果跟你的一样,可是与VC算出来的高位不对
/** update CRC with byte b */
public String encode2(byte[] aByte)
{
int crc;
crc = 0x31E3;
byte[] out = new byte[2];;
for (int j = 0; j < aByte.length; j++) {
crc=crc^((int)aByte[j]<<8);
for (int i=0;i<8;i++)
{
if ((crc&0x8000)>0)
crc=(crc<<1)^0x1021;
else
crc=crc<<1;
}

}
out[0]=(byte)(crc>>8);
out[1]=(byte)crc;
try{
return new String(out,"gbk");
}catch (Exception ex){
return "";
}
}
byte[] b = new byte[]{(byte)0x5A,(byte)0x01,(byte)0x1A};
算出来是:3F 31.
VC算出来是AE 31
qybao 2007-12-07
  • 打赏
  • 举报
回复
have a try

int calc_Crc(int len, byte[] in, byte[] out) {
int i, j, stat;
char crc;

stat = 0x31e3;
crc = 0x31E3;

for (j=0; j<len; j++) {
crc = (char)(crc^(in[j]<<8));

for (i=0; i<8; i++) {
if ((crc & 0x8000) > 0) crc = (char)((crc<<1)^0x1021);
else crc <<= 1;
}

out[0]=(byte)(crc>>8);
out[1]=(byte)crc;

if (crc > 0) stat=1;

return stat;
}
椅子来了 2007-12-07
  • 打赏
  • 举报
回复
和谐接分


chaoxy21cn 2007-12-07
  • 打赏
  • 举报
回复
将这段VC代码转换成JAVA代码,多谢...

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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