如何將諸如「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