まず、コードはコンパイルされません。ここにエラー/間違いがあります。
- 最初のものは、あなたの関数の最初の行で、あなたは
char[]
を返しますが、それを変数に割り当てるには、あなたの試み(コード)int[]
を入力String.ToArray()
を使用して配列に入力文字列を変換していますさ。これは、int[]
をchar[]
またはvar
のいずれかに置き換えることで解決できます。
- 2番目のループの2番目のループ
(k = 0; k > 7)
の内部では、Math.Pow()
を使用し、その戻り値をint
変数(Squared)に割り当てます。しかし、Math.Pow
はdoubleを返します。これを解決するには、返り値Math.Pow
をint
にキャストします。好き。 int Squared = (int)Math.Pow(2, k);
- 最後のものは最初の2つのように簡単に解決できません。コードが正確ではないからです。
StringBuilder
の変数であるtranslated
を返そうとしています。しかし、あなたの関数は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