将charArray转换为byteArray

时间:2014-03-21 14:22:53

标签: c# linq

我有一个字符串,在所有情况下都满足([a-zA-Z0-9])*,我想让它通过sha1。

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

到目前为止,我发现的所有答案都有很多评论为什么从字符串到字节数组的转换是邪恶的,它们提供了字符编码教程的链接,并包含了一堆代码膨胀的字符编码。

在我的情况下,转换 应该是LINQ oneliner,安全而又整洁。

我试过了:

sha.ComputeHash(validator.ToCharArray().ToArray<byte>())

就我的LINQ知识而言,我玩了一遍:

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

4 个答案:

答案 0 :(得分:14)

Encoding.GetEncoding("UTF-8").GetBytes(chararray);

答案 1 :(得分:9)

validator.Select(c => (byte)c).ToArray()

也会奏效。 “string”类型支持“IEnumerable”,因此您可以直接使用LINQ。

“选择”方法允许您指定lambda来自定义输出。这取代了您尝试使用“ToArray(c =&gt;(byte)c))”。

答案 2 :(得分:6)

为了您的目的,编码是不必要的,虽然它可能更方便。

你可以改为,

sha.ComputeHash(validator.SelectMany(BitConverter.GetBytes).ToArray());

答案 3 :(得分:1)

我喜欢这个版本:

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

与以上大致相同