У меня есть приложение C#, в котором я сохраняю свой массив в целочисленное значение, и оно работает.
вот мой массив: int[] myArray = { 0, 1, 3, 15 };
Однако, когда я пытаюсь преобразовать myArray, чтобы увидеть, какие значения он имеет, он возвращает следующие {1, 3, 1, 5}, как вы можете видеть, он не получает 0 и разделяет 15 на {1, 5} .
Вот мой подход:
double[] array = { 0, 1, 3, 15 };
var result = string.Concat(array);
int resultNumber = int.Parse(result); // returns 1315
int[] resultToArray = resultNumber.ToString().Select(o => Convert.ToInt32(o) - 48).ToArray();
Чего мне не хватает в моем resultToArray?
int[] myArray = { 0, 1, 3, 15 };
string concatenated = string.Join(",", myArray);
Console.WriteLine("Concatenated string: " + concatenated);
int[] resultToArray = concatenated.Split(',').Select(int.Parse).ToArray();
Console.WriteLine("Result array: " + string.Join(", ", resultToArray));
Я думаю, нет необходимости много объяснять в приведенном выше коде, это самоочевидно. я только что использовал string.Join(",", myArray), чтобы создать строку, в которой каждое целое число разделено запятой, а затем разделил ее обратно на массив с помощью Split(',') и проанализировал каждый элемент обратно в целое число с помощью Select( int.Парс)
Имхо, это сработает, дайте мне знать!
это решило мою проблему, спасибо. Я думаю, что преобразование его в строку было лучшим подходом. У меня изначально так было. Но я хотел посмотреть, возможно ли использовать целочисленный подход.
Ноль опускается, поскольку он является ведущим нулем: 01315 == 1315
. Несмотря на это, невозможно указать, где начинается одно число, и использовать обычное целое число, поэтому гораздо лучше записывать числа в строку, а не в целое число:
using System.Linq;
// Convert array to string
int[] array = { 0, 1, 3, 15 };
string asString = string.Join(',', array); // -> "0,1,3,15"
// Convert string to array
int[] array2 = asString.Split(',')
.Select(int.Parse)
.ToArray();
Если вам нужно сохранить числа в виде целого числа, вы можете упаковать меньшие числа в большее. Обратите внимание, что вы будете ограничены как в диапазоне номеров, так и в общем количестве, которое вы можете поддерживать. В этом примере кода максимум четыре байта (0–255):
byte[] array = {0, 1, 3, 15};
// Pack these bytes into the int. Max: 4 numbers.
int result = 0;
for (int i = 0; i < array.Length; i++) {
result |= (array[i] << (8 * i));
}
// result -> 251855104
// Retrieve the packed bytes
byte[] array2 = new byte[4];
for (int i = 0; i < array2.Length; i++) {
array2[i] = (byte) ((result >> (8 * i)) & 0xFF);
}
// array2 -> [0, 1, 3, 15];
Пожалуйста, посетите тур , чтобы узнать, как работает Stack Overflow, и прочитайте Как задавать о том, как улучшить качество вашего вопроса. Непонятно, о чем вы спрашиваете и в чем проблема. Пожалуйста, отредактируйте свой вопрос, включив в него более подробное описание вашей проблемы. Откуда вы знаете, как разделить число типа
12345
на исходный массив? Нет индикаторов, которые вы могли бы использовать.