Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226

Преобразование уинт\инт числа в байт массив

15.02.2013, 18:18. Показов 4777. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Необходимо преобразовать uint\int числа в байт массив БЕЗ использования BitConvertor-а. Набросал код с использованием бит шифтинга - работает, но получается так что для одного числа длина указана верно, а для другого уже идет ошибка компилятора, мол невозможно преобразовать число 960 в byte. Собственно как быть? BitConvertor юзать не хочется
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2013, 18:18
Ответы с готовыми решениями:

Преобразование изображения в массив байт
Уважаемые коллеги, подскажите как из изображения(тип любой) получить массив байт? Слышал, что можно через Encoding, а ещё как? Рассмотрю...

Преобразование класса в массив байт
Доброго времени суток! Задача следующая. Через сокет приходит пакет данных в виде байтового массива (datagrab). На серверном приложении...

Преобразование MD5 в массив байт
Привет, MD5 это 128 битный хеш. К примеру MD5("key") = "3c6e0b8a9c15224a8228b9a98ca1531d" как это перевести в 16 байт? Понятно, что это...

4
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
15.02.2013, 18:29
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button1_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(textBox1.Text))
            {
 
                List<Byte> bytesMas = new List<byte>();
                int number = Convert.ToInt32(textBox1.Text);
 
                unsafe
                {
                    byte* ptr = (byte*)&number;
                    for (int i = 0; i < sizeof(Int32); i++)
                    {
                        bytesMas.Add(*ptr++);
                    }
 
                }
 
                foreach (Byte thisOne in bytesMas)
                    Console.Write("{0:x2}" + " " , thisOne); 
 
 
            }
Добавлено через 2 минуты
Только выводить надо будет в обратном порядке.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.02.2013, 19:22
Если без небезопасного контекста:
C#
1
2
3
4
5
6
7
byte[] GetBytes(uint x)
{
   var bytes = new byte[sizeof(int)];
   for (int i = 0; i < bytes.Length; i++)
      bytes[i] = (byte)(x >> (i * 8));
   return bytes;
}
1
1 / 1 / 1
Регистрация: 03.03.2011
Сообщений: 44
05.04.2013, 04:24
Подскажите, как преобразовать массив Int16 в массив byte через указатели? Например, Int16[50] в byte[100].

Добавлено через 29 минут
Или без указателей, но чтобы код был как можно более быстродействующим.

Добавлено через 59 минут
C#
1
2
3
4
5
for (int i = 0; i < ar16.Length; i++)
{
    ar[i * 2] = (byte)(ar16[i] >> 8);
    ar[i * 2 + 1] = (byte)(ar16[i]);
}
Я пока вот так сделал, но такое ощущение, что это не самый оптимальный вариант.
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
05.04.2013, 15:17
самый быстрый возможный способ, особая черная магия - любой размер массива 1мс
очень черная магия. чуть-чуть слом типизации дотнета
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
namespace System {
    public static class ArrayExt {
 
        [ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
        public static unsafe T[] ChangeTypeUnsafe<T>(this Array source) where T : struct
        {
            if (source == null) {
                throw new ArgumentNullException("source");
            }
 
            if (source.Length <= 0) {
                throw new IndexOutOfRangeException("В массиве должен быть хотя бы 1 элемент");
            }
 
            Type targetType = typeof (T);
 
            int newElementSize = Marshal.SizeOf(targetType);
            int oldElementSize = Marshal.SizeOf(source.GetValue(0));
 
            int newArrayLen;
 
            if (newElementSize > oldElementSize) {
                newArrayLen = newElementSize/(source.Length*oldElementSize);
 
                if (newElementSize*newArrayLen > source.Length*oldElementSize) {
                    throw new InvalidCastException("Итоговый байтовый размер массива не должен превышать исходный");
                }
            }
            else {
                newArrayLen = source.Length*oldElementSize/newElementSize;
            }
 
            GCHandle fixedSource = GCHandle.Alloc(source, GCHandleType.Pinned);
            IntPtr ptr = fixedSource.AddrOfPinnedObject();
 
            Array targetTypeSample = Array.CreateInstance(targetType, 0);
            GCHandle fixedTemp = GCHandle.Alloc(targetTypeSample, GCHandleType.Pinned);
 
            if (IntPtr.Size == 4)
            {
                *((int*)ptr - 2) = *((int*)fixedTemp.AddrOfPinnedObject() - 2);
                *((int*)ptr - 1) = newArrayLen;
            }
            else
            {
                *((long*)ptr - 2) = *((long*)fixedTemp.AddrOfPinnedObject() - 2);
                *((long*)ptr - 1) = newArrayLen;
            }
 
            fixedSource.Free();
            fixedTemp.Free();
 
            return source as T[];
        }
    }
}
C#
1
2
3
            Int16[] source = new Int16[50];
 
            byte[] result = source.ChangeTypeUnsafe<byte>();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2013, 15:17
Помогаю со студенческими работами здесь

Преобразование в ИНТ
int f = htmlStr.Append(reader); Label1 = f; Наконец то добрался до кодинга. Вопрос такой, как правильно преобразовать...

Преобразование HICON в массив байт и обратно
Всем доброго времени суток! Пишу 2 приложения: Приложение 1, не mfc: Вытаскивает из .exe ресурс иконки HICON, преобразует в...

Преобразование строки в инт
Необходимо сравнить значения символов, чтобы они не превышали данного числа. На ввод поступает строка. Допустим &quot;1AF67D&quot;. Как...

Преобразование знакового десятичного числа типа байт в троичное со знаком
Здравствуйте. Помогите написать процедуру преобразования знакового десятичного числа типа байт в троичное со знаком. Я использую вот такую,...

Преобразование целочисленного конст. массива (инт) в строку
Имеется массив целых чисел, допустим 100 чисел в произвольном диапазоне. Необходимо получить его в качестве параметра, а возвратить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru