将字母强制转换为int时C#会做什么?
我们要为外部接口实现加密。 接口的所有者已经提供了如何在我们这边预先形成相同加密的文档。 但是,此文档在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时,我们得到一个长度为19’字符的int。
当在字符串中对一个非常长的“数字”进行类型转换时,C#是否也会创建一个更短的int?
您正在将char
转换为int
。 char
是UTF-16代码单元 – 无符号的16位整数(范围是[0, 65535]
)。 你得到的值基本上扩展为32位有符号整数。 因此, 'A'
最终为65,欧元符号(U + 20AC)最终为8364(0x20ac)。
至于你的第二部分 – 你正在创建一个int
,你正在创建一个int
数组 。 是的,你将创建一个包含320个元素的数组。
C#字符串是UTF16。 将UTF16字符转换为int时,它只是将16位UTF16字符值复制到32位int中。
C#可以将一个字符hashString
转换为一个int,并为你提供字符代码。上面的代码是一个字符串hashString
,并把它变成一个整数数组, keybuffer
。 C#能够使用indexer []
语法处理类似字符数组的字符串。 上面的代码将生成一个int数组,哈希字符串中每个字符一个,每个int将是相应字符的字符代码。
要扩展Jon Skeet的post,您的“十进制” 整数值将映射到相应的char值,如下图所示(我在开发PC上已有多年)。
因此,将integer
数值0转换为char
将返回NULL
。
编辑:看看你原来的问题,你可能会更好地查看MD5示例,而不是将字符串转换为整数数组。
代码实际上将char
(通常为ASCII)转换为int
,而不是’0’为0.因此,如果原始字符串为“d131dd02c5e6eec4”,则生成的数组将为int [] {100,49,51,49,100, 100,48,50,99,53,101,54,101,101,99,52}。
所以我想你需要PHP脚本中的函数ord
。
编辑:
一点点评论,在PHP中将string
为int
实际上可以将其表示为int
,并且最大的int
PHP处理是32位或64位,具体取决于操作系统,这就是为什么你得到一个19-char long int,是64位int的最大值。
在C#中,还有另一个名为char
变量类型,它表示一个unicode字符,可以直接转换为整数。 您不能直接在C#中将C#中的string
转换为int
。
EDIT2:我想你的PHP脚本看起来像这样: