首先,你的代碼不會編譯。這是錯誤/錯誤。
- 第一個是,在你的函數的第一行中,在輸入字符串轉換爲使用
String.ToArray()
陣列,它返回一個char[]
但你嘗試將它分配給一個變量(代碼)輸入int[]
。您可以通過將int[]
替換爲char[]
或var
來解決此問題。
- 第二個是,在循環
(k = 0; k > 7)
的第二個內部,使用Math.Pow()
並將其返回值分配給int
變量(平方)。但Math.Pow
返回一倍。您可以通過將返回值Math.Pow
轉換爲int
來解決此問題。喜歡; int Squared = (int)Math.Pow(2, k);
- 最後一件事情不像前兩個那樣容易解決,因爲你的代碼不完全正確。您正試圖返回一個名爲
translated
的東西,這是一個類型爲StringBuilder
的變量。但是你的函數被定義爲返回一個int
。
現在,這些都是編譯錯誤。有一堆邏輯和決策錯誤/錯誤。你的算法也不是很正確。
這是您可以使用/檢查的示例代碼。我想進一步幫助你,爲什麼你的代碼不正確,你的設計錯誤是什麼,如果你想。
class binaryTranslate
{
public enum IncompleteSegmentBehavior
{
Skip = 0,
ZerosToStart = 1,
ZerosToEnd = 2
}
private byte ConvertBinstrToByte(string sequence)
{
if (string.IsNullOrEmpty(sequence))
return 0; // Throw?
if (sequence.Length != sizeof(byte) * 8)
return 0; // Throw?
const char zero = '0';
const char one = '1';
byte value = 0;
for (int i = 0; i < sequence.Length; i++)
{
if (sequence[i] != zero && sequence[i] != one)
return 0; // Throw
value |= (byte)((sequence[i] - zero) << (7 - i));
}
return value;
}
private string HandleIncompleteSegment(string segment, int segmentSize, IncompleteSegmentBehavior behavior)
{
string result = null;
var zeroAppender = new StringBuilder();
for (int i = 0; i < segmentSize - segment.Length; i++)
zeroAppender.Append('0');
var zeros = zeroAppender.ToString();
switch (behavior)
{
case IncompleteSegmentBehavior.Skip:
break;
case IncompleteSegmentBehavior.ZerosToStart:
result = zeros + result;
break;
case IncompleteSegmentBehavior.ZerosToEnd:
result = result + zeros;
break;
default:
break;
}
return result;
}
public byte[] ConvertBinstrToBytes(string binarySequence, IncompleteSegmentBehavior behavior = IncompleteSegmentBehavior.Skip)
{
var segmentSize = sizeof(byte) * 8;
var sequenceLength = binarySequence.Length;
var numberOfBytes = (int)Math.Ceiling((double)sequenceLength/segmentSize);
var bytes = new byte[numberOfBytes];
for (int i = 0; i < numberOfBytes; i++)
{
var charactersLeft = sequenceLength - i * segmentSize;
var segmentLength = (charactersLeft < segmentSize ? charactersLeft : segmentSize);
var segment = binarySequence.Substring(i * segmentSize, segmentLength);
if (charactersLeft < segmentSize)
{
segment = HandleIncompleteSegment(segment, segmentSize, behavior);
if (segment == null)
continue;
}
bytes[i] = ConvertBinstrToByte(segment);
}
return bytes;
}
}
此代碼傳遞這些斷言。
var bytes = new binaryTranslate()
.ConvertBinstrToBytes("00000000");
Assert.Equal(bytes.Length, 1);
Assert.Equal(bytes[0], 0b00000000);
bytes = new binaryTranslate()
.ConvertBinstrToBytes("10000000");
Assert.Equal(bytes.Length, 1);
Assert.Equal(bytes[0], 0b10000000);
bytes = new binaryTranslate()
.ConvertBinstrToBytes("11111111");
Assert.Equal(bytes.Length, 1);
Assert.Equal(bytes[0], 0b11111111);
bytes = new binaryTranslate()
.ConvertBinstrToBytes("00000001");
Assert.Equal(bytes.Length, 1);
Assert.Equal(bytes[0], 0b00000001);
bytes = new binaryTranslate()
.ConvertBinstrToBytes("1100110000110011");
Assert.Equal(bytes.Length, 2);
Assert.Equal(bytes[0], 0b11001100);
Assert.Equal(bytes[1], 0b00110011);
什麼是不工作?更詳細地描述問題,而不是僅僅說「語法不正確」。 –
你可以試試這個[答案](https://stackoverflow.com/questions/6006425/binary-to-corresponding-ascii-string-conversion) – Vijay
'convertBin'應該是靜態的,因爲我假定這是一個控制檯應用。你的程序也不會輸出任何東西。 – DrNachtschatten