Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将charArray转换为byteArray_C#_Linq - Fatal编程技术网

C# 将charArray转换为byteArray

C# 将charArray转换为byteArray,c#,linq,C#,Linq,我有一个字符串,它在任何情况下都满足([a-zA-Z0-9])*,我想让它在sha1中运行 那么,如何将字符串(或使用tocharray()获得的字符数组)转换为字节数组呢 到目前为止,我找到的所有答案都有一大堆注释,解释了为什么从字符串到字节数组的转换是有害的,它们提供了到字符编码教程的链接,并包含了一堆使代码膨胀的字符编码 在我的情况下,转换应该是一个LINQ oneliner,安全和整洁 我试过: sha.ComputeHash(validator.ToCharArray().ToArra

我有一个字符串,它在任何情况下都满足
([a-zA-Z0-9])*
,我想让它在sha1中运行

那么,如何将字符串(或使用tocharray()获得的字符数组)转换为字节数组呢

到目前为止,我找到的所有答案都有一大堆注释,解释了为什么从字符串到字节数组的转换是有害的,它们提供了到字符编码教程的链接,并包含了一堆使代码膨胀的字符编码

在我的情况下,转换应该是一个LINQ oneliner,安全和整洁

我试过:

sha.ComputeHash(validator.ToCharArray().ToArray<byte>())
sha.ComputeHash(validator.tocharray().ToArray())
就我的LINQ知识而言,我一直在玩:

sha.ComputeHash(validator.ToCharArray().ToArray<byte>(c => (byte)c))
sha.ComputeHash(validator.ToCharArray().ToArray(c=>(字节)c))

出于您的目的,编码是不必要的,尽管它可能更方便

你可以这样做

sha.ComputeHash(validator.SelectMany(BitConverter.GetBytes).ToArray());
也会起作用。“string”类型支持“IEnumerable”,因此您可以将LINQ直接用于一个

“选择”方法允许您指定lambda以自定义输出。这将替换您试图对“ToArray(c=>(byte)c))”执行的操作。

我喜欢以下版本:

 System.Text.Encoding.UTF8.GetBytes(chararray);

或多或少与上面的相同

应该是您所需要的全部,我想……我不确定这一点,但是,两个具有不同规范化的字符串可能编码为相同的字节。这可能是可取的,也可能不是可取的。(我认为这一点在问题中指定的范围内没有意义。)@Alexander,根据您的输入范围,这将生成与
相同的哈希值。选择(c=>(byte)c.ToArray()
编码.UTF8.GetBytes(chararray)缩小但在255以下安全。@Alexander,根据您的输入范围,这将生成与
UTF.GetBytes
validator.Select(c => (byte)c).ToArray()
 System.Text.Encoding.UTF8.GetBytes(chararray);