如何将诸如“01110100011001010111001101110100”之类的字符串转换为字节数组,然后使用File.WriteAllBytes使得确切的二进制字符串是文件的二进制文件。在这种情况下,它将是文本“测试”。将二进制字符串表示转换为字节数组
回答
如果你没有这个LINQ神物,所以最近常见,你可以尝试以正常的方式
string input ....
int numOfBytes = input.Length/8;
byte[] bytes = new byte[numOfBytes];
for(int i = 0; i < numOfBytes; ++i)
{
bytes[i] = Convert.ToByte(input.Substring(8 * i, 8), 2);
}
File.WriteAllBytes(fileName, bytes);
LINQ是伟大的,但有必须有一定的限制。
你可以通过分割线划分成8个字符的字符串序列展开,然后将这些字符串转换为字节,并最终写入的字节文件
string input = "01110100011001010111001101110100";
var bytesAsStrings =
input.Select((c, i) => new { Char = c, Index = i })
.GroupBy(x => x.Index/8)
.Select(g => new string(g.Select(x => x.Char).ToArray()));
byte[] bytes = bytesAsStrings.Select(s => Convert.ToByte(s, 2)).ToArray();
File.WriteAllBytes(fileName, bytes);
编辑:这里是另一种方式字符串分割为8个字符的块,也许有点简单:
int nBytes = (int)Math.Ceiling(input.Length/8m);
var bytesAsStrings =
Enumerable.Range(0, nBytes)
.Select(i => input.Substring(8 * i, Math.Min(8, input.Length - 8 * i)));
如果您知道该字符串的长度为8的倍数,可以使其更简单:
int nBytes = input.Length/8;
var bytesAsStrings =
Enumerable.Range(0, nBytes)
.Select(i => input.Substring(8 * i, 8));
刚碰到这个问题。一个很好的玩具问题...适合面试。在阅读答案之前,我想我会试一试。匹配你的第二种方法实际上任期的术语。我也沉迷于LINQ! +1 – spender 2010-08-09 00:06:50
其他答案你有覆盖,但只是为了好玩,我写了相反的。从字符串要去ASCII二进制表示:
private static string StringToAsciiBin(string s)
{
string output = "";
foreach (char c in s.ToCharArray())
{
for (int i = 128; i >= 1; i /=2)
{
if (((int)c & i) > 0)
{
output += "1";
}
else
{
output += "0";
}
}
}
return output;
}
你会想从一个字节数组转到二进制表示。字符是一个16位的数据类型,所以你会砍掉每个字符代码的前八位。另外,不要使用+ =来构建一个字符串,它的缩放非常糟糕,而是使用StringBuilder。 – Guffa 2010-08-08 23:36:35
晚了一点,但这里是我的2美分:
var binaryStr = "01110100011001010111001101110100";
var byteArray = Enumerable.Range(0, int.MaxValue/8)
.Select(i => i*8)
.TakeWhile(i => i < binaryStr.Length)
.Select(i => binaryStr.Substring(i, 8))
.Select(s => Convert.ToByte(s, 2))
.ToArray();
File.WriteAllBytes("C:\temp\test.txt", byteArray);
实际@Maciej的答案是不正确的。由于@ Phate01注意到numOfBytes
仅适用于输入长度为8
的功率。第二件事是字节数组应该从n
填充到0
索引不是相反的方式。下面的代码示例:
var bits = "000011110000001000";
var numOfBytes = (int)Math.Ceiling(bits.Length/8m);
var bytes = new byte[numOfBytes];
var chunkSize = 8;
for (int i = 1; i <= numOfBytes; i++)
{
var startIndex = bits.Length - 8 * i;
if (startIndex < 0)
{
chunkSize = 8 + startIndex;
startIndex = 0;
}
bytes[numOfBytes - i] = Convert.ToByte(bits.Substring(startIndex, chunkSize), 2);
}
这可以提高摆脱if
statetment,但以这种形式它更容易理解。
- 1. 将二进制字符串转换为字节数组
- 2. MD5二进制字符串转换为字节数组
- 3. Go - 将表示二进制数的字符串转换为int
- 4. 将字符串转换为二进制
- 5. 将字符串转换为二进制
- 6. 将二进制转换为字符串
- 7. 将字符串转换为二进制
- 8. 将二进制字符串转换为二进制文字
- 9. C++将字节二进制值转换为字符串
- 10. Java将字节转换为二进制安全字符串
- 11. 将字节转换为c中的二进制字符串#
- 12. 将字节[]转换为二进制的字符串表示形式
- 13. Go - 如何将二进制字符串转换为二进制字节?
- 14. 将二进制数据转换为节点中的字符串
- 15. 如何将160位二进制字符串转换为20字节数组?
- 16. 从二进制文件读取并将字节数组转换为字符串
- 17. ASP Classic - 将base64二进制字符串转换为字节数组
- 18. 将字符串转换为python中的二进制表示
- 19. Python:将字符串转换为其二进制表示形式
- 20. 将C字符串转换为二进制表示
- 21. 将字符串数组(字节值)转换为字节数组
- 22. 将表示二进制的字符串转换为二进制python
- 23. 将数字转换为基数2(二进制)字符串表示
- 24. 将一串字符转换为一个二进制值数组
- 25. Cython将二进制字符串快速转换为int数组
- 26. 转换十六进制字符串字节到字节数组
- 27. 将字符串转换为二进制字符串
- 28. 将二进制字符串转换为文本字符串
- 29. 将二进制字符串转换为二进制
- 30. Python将二进制字符串转换为二进制int
下面是一个很好的开始:http://msdn.microsoft.com/en-us/library/system.convert_methods.aspx – NullUserException 2010-08-08 23:02:13