将字母强制转换为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转换为intchar是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

ASCII表

编辑:看看你原来的问题,你可能会更好地查看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中将stringint实际上可以将其表示为int ,并且最大的int PHP处理是32位或64位,具体取决于操作系统,这就是为什么你得到一个19-char long int,是64位int的最大值。

在C#中,还有另一个名为char变量类型,它表示一个unicode字符,可以直接转换为整数。 您不能直接在C#中将C#中的string转换为int

EDIT2:我想你的PHP脚本看起来像这样: