У меня есть следующий код о функции шашек игры, которая обрабатывает движение:BitConverter.ToInt16() производит неожиданный результат
public void convertMoveToIntValues(KeyValuePair<string, string> move, ref Int16 fromNumInt, ref Int16 toNumInt) {
Byte[] fromNumTemp = { 0, 0 };
Byte[] fromNum = {0,0,0,0};
fromNumTemp = Encoding.ASCII.GetBytes(move.Key);
fromNumTemp[0] -= 96;
fromNumTemp[1] -= 48;
fromNum[1] = fromNumTemp[0];
fromNum[3] = fromNumTemp[1];
fromNumInt = (Int16)(BitConverter.ToInt16(fromNum, 0) * 8 + BitConverter.ToInt16(fromNum, 2));
Byte[] toNumTemp = {0,0};
Byte[] toNum = { 0, 0, 0, 0 };
toNumTemp = Encoding.ASCII.GetBytes(move.Value);
toNumTemp[0] -= 96;
toNumTemp[1] -= 48;
toNum[1] = toNumTemp[0];
toNum[3] = toNumTemp[1];
toNumInt = (Int16)(BitConverter.ToInt16(toNum, 0) * 8 + BitConverter.ToInt16(toNum, 2));
}
public void Main() {
Int16 a, b;
convertMoveToInt(New KeyValuePair<string, string>("c3","b4"), a, b);
Console.Writeline("The puppet moves from place no. " + a + " to place no. " + b);
}
я получаю неправильные решения, как: а = 6912 и B = 5120.
Я использую два типа байта [], первый для преобразования ASCII в байт, а затем другой для преобразования Byte to Int16. Хорошая ссылка на эту тему: https://msdn.microsoft.com/en-us/library/system.bitconverter.toint16(v=vs.110).aspx
Все идет хорошо до последней строки, где она производит неверный результат.
Не могли бы вы помочь мне получить правильный ответ?
Вы ожидали (27, 20) вместо (6912, 5120)? – dasblinkenlight