Следующий код находится в стадии разработки, и я также трачу время, чтобы попытаться узнать больше о преобразовании между битами, шестнадцатеричными и целыми числами; Многое из этого, очевидно, является повторяющимися операциями, поскольку мы делаем одно и то же с 7 различными «пакетами», поэтому не стесняйтесь замалчивать повторы (просто хотелось иметь всю структуру кода, чтобы, возможно, ответить на некоторые вопросы заранее).
/* Pack bits into containers to send them as 32-bit (4 bytes) items */
int finalBitPackage_1 = 0;
int finalBitPackage_2 = 0;
int finalBitPackage_3 = 0;
int finalBitPackage_4 = 0;
int finalBitPackage_5 = 0;
int finalBitPackage_6 = 0;
int finalBitPackage_7 = 0;
var bitContainer_1 = new BitArray(32, false);
var bitContainer_2 = new BitArray(32, false);
var bitContainer_3 = new BitArray(32, false);
var bitContainer_4 = new BitArray(32, false);
var bitContainer_5 = new BitArray(32, false);
var bitContainer_6 = new BitArray(32, false);
var bitContainer_7 = new BitArray(32, false);
string hexValue = String.Empty;
...
*assign 32 bits (from bools) to every bitContainer[] here*
...
/* Using this single 1-D array for all assignments works because as soon as we convert arrays,
we store the result; this way we never overwrite ourselves */
int[] data = new int[1];
/* Copy containers to a 1-dimensional array, then into an Int for transmission */
bitContainer_1.CopyTo(data, 0);
hexValue = data[0].ToString("X");
finalBitPackage_1 = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
bitContainer_2.CopyTo(data, 0);
hexValue = data[0].ToString("X");
finalBitPackage_2 = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
bitContainer_3.CopyTo(data, 0);
hexValue = data[0].ToString("X");
finalBitPackage_3 = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
bitContainer_4.CopyTo(data, 0);
hexValue = data[0].ToString("X");
finalBitPackage_4 = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
bitContainer_5.CopyTo(data, 0);
hexValue = data[0].ToString("X");
finalBitPackage_5 = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
bitContainer_6.CopyTo(data, 0);
hexValue = data[0].ToString("X");
finalBitPackage_6 = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
bitContainer_7.CopyTo(data, 0);
hexValue = data[0].ToString("X");
finalBitPackage_7 = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
Из того, что я узнал до сих пор, если двоичное значение преобразуется в Int32, первая цифра говорит, будет ли оно -/+, где 1 указывает (-), а 0 указывает (+); однако в моих битовых массивах, начинающихся с 0, они отображаются как отрицательное число, когда я выполняю транзакцию CopyTo(int[]), а битовые массивы, начинающиеся с 1, отображаются как положительные при копировании.
Кроме того, существует проблема преобразования их значений Int32 в значения Hex. Любые значения, которые получаются в результате преобразования массива как отрицательные, не получают 8 F, добавленных вперед, как при проверке с помощью http://www.binaryhexconverter.com/, поэтому я не был уверен в этом, поскольку мои знания Hex ограничены, и я не хотел терять значимые данные при передаче данных в другую систему (через TCP /IP, если это кому-то важно). Я опубликую значения, которые я получаю из всего ниже, чтобы помочь прояснить это.
Variable Binary Int32[] My Hex
bitContainer_1 "01010101010101010101010101010101" "-1431655766" AAAAAAAA
bitContainer_2 "10101010101010101010101010101010" "1431655765" 55555555
bitContainer_3 "00110011001100110011001100110011" "-858993460" CCCCCCCC
bitContainer_4 "11001100110011001100110011001100" "858993459" 33333333
bitContainer_5 "11100011100011100011100011100011" "-954437177" C71C71C7
bitContainer_6 "00011100011100011100011100011100" "954437176" 38E38E38
bitContainer_7 "11110000111100001111000011110000" "252645135" F0F0F0F
Шестнадцатеричные значения онлайн:
FFFFFFFFAAAAAAAA
555555555
FFFFFFFFCCCCCCCC
33333333
FFFFFFFFC71C71C7
38E38E38
F0F0F0F
Convert.ToString(-1431655766, 16)
иConvert.ToString(-1431655766L, 16)
- person Dennis_E   schedule 14.03.2016