我们必须为外部接口实现加密。接口的所有者已经给出了如何在我们这边预置相同加密的文档。但是,这个文档是用C#编写的,我们使用的是PHP。
我们所理解的大部分部分,除了它们似乎将散列类型转换为int之外。他们的守则是:
// hashString exists and is a md5 a like string
int[] keyBuffer = new int[hashString.length];
for (int i=0; i<hashString.length; i++) {
keyBuffer[i] = (int)hashString[i];
}在PHP中,当将字母转换为int时,可以得到0 (int)。因为我们无法想象这就是第三方的意思,我们相信C#会做其他的事情。
是否也将C#转换为int 0,或者可能转换为char??
第二,最初的hashString是320长。这意味着代码将创建一个320长的int??在PHP中,您没有像C#这样保留内存的想法。但是当我们尝试把320长的字符串输入到int时,我们得到了一个int,它是19 'chars‘长。
C#在输入字符串中很长的“数字”时也会创建一个较短的int吗?
发布于 2012-06-19 13:41:34
您正在将char转换为int。char是一个UTF-16代码单元-一个无符号的16位整数(范围是[0, 65535]).你得到的数值,基本上,扩大为一个32位有符号整数。例如,'A'以65结尾,而欧元符号(U+20AC)最终为8364 (0x20ac)。
至于第二部分--您正在创建一个int,您正在创建一个int数组。是的,您将创建一个包含320个元素的数组。
发布于 2012-06-19 13:42:02
C#字符串是UTF16。当您将UTF16字符强制转换为int时,它只是将16位UTF16字符值复制到32位int中。
发布于 2012-06-19 13:47:00
C#可以将字符强制转换为int,并给出字符code.The代码,上面是一个字符串,hashString,并将其转换为整数数组keybuffer。C#能够使用索引器[]语法将字符串视为字符数组。上面的代码将生成一个int数组,散列字符串中的每个字符只有一个,每个int将是相应字符的字符代码。
https://stackoverflow.com/questions/11102194
复制相似问题