能不能用java将下面这段程序写一下~

camdw_3 2013-11-18 03:24:07
unsigned short CRC16(void * Buff_addr,unsigned short len)
{
unsigned char * dataPtr=(unsigned char *)Buff_addr;
unsigned short index=0;
unsigned short crc=0;

while(len--)
{
crc=(unsigned char)(crc>>8)|(crc<<8);
crc^=dataPtr[index++];
crc^=(unsigned char)(crc&0xff)>>4;
crc^=(crc<<8)<<4;
crc^=((crc&0xff)<<4)<<1;
}

return crc;
}

最好可以有个简单测试可以在eclipse下面运行的~
...全文
169 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
camdw_3 2013-11-18
  • 打赏
  • 举报
回复
结贴了!好用多谢!
daxiang253 2013-11-18
  • 打赏
  • 举报
回复
引用 6 楼 rui888 的回复:
[quote=引用 4 楼 zyc13701469860 的回复:] 试试这个,用c和java跑出来结果一样 java里short最大值32767,只能用int了。

public class Test01 {

	public static void main(String[] args) {
		int crc = CRC16(new byte[] { 0x01, 0x02, 0x03, 0x04, 0x03, 0x02 }, 6);
		System.out.println(Integer.toHexString(crc));
	}

	static int CRC16(byte[] buffer, int len) {
		int index = 0;
		int crc = 0;
		while (len-- > 0) {
			crc = (crc >> 8) | (crc << 8);
			crc ^= buffer[index++];
			crc ^= (crc & 0xff) >> 4;
			crc ^= (crc << 8) << 4;
			crc ^= ((crc & 0xff) << 4) << 1;
			crc &= 0xFFFF;
		}
		return crc;
	}
}
郭嘉 就是很猛。[/quote]求分
tony4geek 2013-11-18
  • 打赏
  • 举报
回复
引用 4 楼 zyc13701469860 的回复:
试试这个,用c和java跑出来结果一样 java里short最大值32767,只能用int了。

public class Test01 {

	public static void main(String[] args) {
		int crc = CRC16(new byte[] { 0x01, 0x02, 0x03, 0x04, 0x03, 0x02 }, 6);
		System.out.println(Integer.toHexString(crc));
	}

	static int CRC16(byte[] buffer, int len) {
		int index = 0;
		int crc = 0;
		while (len-- > 0) {
			crc = (crc >> 8) | (crc << 8);
			crc ^= buffer[index++];
			crc ^= (crc & 0xff) >> 4;
			crc ^= (crc << 8) << 4;
			crc ^= ((crc & 0xff) << 4) << 1;
			crc &= 0xFFFF;
		}
		return crc;
	}
}
郭嘉 就是很猛。
jdgdf566 2013-11-18
  • 打赏
  • 举报
回复
这个函数是为了完成什么功能?字符集转码?
Mourinho 2013-11-18
  • 打赏
  • 举报
回复
试试这个,用c和java跑出来结果一样 java里short最大值32767,只能用int了。

public class Test01 {

	public static void main(String[] args) {
		int crc = CRC16(new byte[] { 0x01, 0x02, 0x03, 0x04, 0x03, 0x02 }, 6);
		System.out.println(Integer.toHexString(crc));
	}

	static int CRC16(byte[] buffer, int len) {
		int index = 0;
		int crc = 0;
		while (len-- > 0) {
			crc = (crc >> 8) | (crc << 8);
			crc ^= buffer[index++];
			crc ^= (crc & 0xff) >> 4;
			crc ^= (crc << 8) << 4;
			crc ^= ((crc & 0xff) << 4) << 1;
			crc &= 0xFFFF;
		}
		return crc;
	}
}
camdw_3 2013-11-18
  • 打赏
  • 举报
回复
顶~沉的好快~
camdw_3 2013-11-18
  • 打赏
  • 举报
回复
java板块没错,看清题意~是将c的一个算法转成java版本的~
student-ai 2013-11-18
  • 打赏
  • 举报
回复
应该发到C/C++板块吧。。。。。。

62,620

社区成员

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

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