这句代码用Java如何表示,求大神指导,急急急!!!

始终向前的蜗牛 2017-11-30 03:30:31
unsigned int HfIp(char* url)
{
unsigned int n = 0;
char* b = (char*)&n;
for (int i = 0; i<strlen(url); i++)
b[i % 4] ^= url[i];
return n % 0x7FFFFFFF;
}
这段代码
主要是char* b = (char*)&n;
用Java怎么表述呢?

Java中只有引用,上述代码中:b的值改变会使得n也一起改变,这个是在不会弄,求指导!!!
...全文
373 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
{9}
@u014034934
感谢感谢。
我测试了一下,两个差一点点,但已经超牛了!!
我都弄了几天了,都没头绪,谢谢!

C代码结果


Java代码结果


逗比123号 2017-12-01
  • 打赏
  • 举报
回复
引用 8 楼 wd153263008 的回复:
@u014034934 谢谢大神!。 感觉楼上说的已经很接近了,但是还是不对。 直接上我用c调试的图吧, 初始状态:n=0, b->n; 第一次循环,b读取到w,n变为119。 第二次循环,b读取到第二个w,n变为30583。 第三次循环
不知道是big-endian还是little-endian,我就写成little-endian了,java默认是big-endian的。

public static int Hflp (byte[] url) {
		int n = 0;
		byte[] bytes = intTobyte(n);
		for (int i= 0; i < url.length; i++) {
			bytes[i % 4] ^= url[i]; 
		}
		n = byteToInt(bytes);
		return n % 0x7FFFFFFF;
		
	}
	
	public static byte[] intTobyte (int i) {
		byte[] bytes = new byte[4];
		bytes[0] = (byte) (i  & 0xFF);
		bytes[1] = (byte) ((i >> 8) & 0xFF);
		bytes[2] = (byte) ((i >> 16) & 0xFF);
		bytes[3] = (byte) ((i >> 24) & 0xFF);
		return bytes;
	}
	
	public static int byteToInt (byte[] bytes) {
		int a = bytes[0] & 0xFF;
		int b = (bytes[1] & 0xFF) << 8;
		int c = (bytes[2] & 0xFF) << 16;
		int d = (bytes[3] & 0xFF) << 24;
		return a+b+c+d;
	}
  • 打赏
  • 举报
回复
@u014034934
谢谢大神!。

感觉楼上说的已经很接近了,但是还是不对。
直接上我用c调试的图吧,
初始状态:n=0, b->n;


第一次循环,b读取到w,n变为119。


第二次循环,b读取到第二个w,n变为30583。



第三次循环


逗比123号 2017-11-30
  • 打赏
  • 举报
回复
类似于这个吧

	public static int Hflp (char[] url) {
		int n = 0;
		char[] chars = intTochar(n);
		for (int i= 0; i < url.length; i++) {
			chars[i % 2] ^= url[i]; 
		}
		n = charToInt(chars);
		return n % 0x7FFFFFFF;
		
	}
	
	public static char[] intTochar (int i) {
		char[] chars = new char[2];
		chars[0] = (char) ((i >> 16) & 0xFFFF);
		chars[1] = (char) ( i & 0xFFFF);
		return chars;
	}
	
	public static int charToInt (char[] chars) {
		return (chars[0] & 0xFFFF) << 16 | (chars[1] & 0xFFFF);
	}
  • 打赏
  • 举报
回复
C ch = new C(); ch.c = 'a'; System.out.println("1 ch = " + ch.c); C c = ch ; c.c = 'b'; System.out.println("2 ch = " + ch.c); class C{ public char c; } 类似这样的就行
  • 打赏
  • 举报
回复
自己写个类,里面包含一个char变量,使用类对象操作你那个char变量就可以跟着同时变了。
  • 打赏
  • 举报
回复
大哥,没那么简单的。 char* b = (char*)&n; 因为b是一个指针,指向n, b的值改变会使得n也一起改变。
huage 2017-11-30
  • 打赏
  • 举报
回复
我看了下你这个代码的意思,,大概是将一个char类型转换成int类型吧,你这个在java是不能这样的必须转换成byte数组然后在用byte数组来转换int  具体的转换规则百度下吧 我也记不住哈
  • 打赏
  • 举报
回复
什么意思? char* b = (char*)&n; 主要是这句怎么转化成Java代码。
huage 2017-11-30
  • 打赏
  • 举报
回复
这种放在java代码中非常简单 把变量n、b作为一个变量放在更外层的全局变量就可以了

62,628

社区成员

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

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