Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
22 / 22 / 10
Регистрация: 19.03.2015
Сообщений: 137

Как переконвертировать int в byte[]?

05.12.2015, 17:24. Показов 3731. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как переконвертировать hex занчение int в byte[]?
Чтобы
C#
1
int a = 0x45C5;
cтало
C#
1
byte[] b = new byte[] {0x45, 0xC5};
udp: и наоборот тоже
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2015, 17:24
Ответы с готовыми решениями:

Варианты конвертации bool/byte/int в byte/int
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А вот меня интересует преобразование...

int в byte
как перевести int в byte а потом обратно в int???

Как перевести byte[] или переменную типа IntPtr к типу byte[] (ассемблерные инструкции)?
Наткнулась на проблему, нужно перевести тип IntPtr в массив ассемблерной инструкции. Вот пример кода, который нужно справить: ...

20
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
05.12.2015, 18:22
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

BitConverter.GetBytes() / BitConverter.ToInt32()
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
05.12.2015, 18:48
int вообще 4 байта, да и использовать лучше беззнаковые типы для таких целей.
С порядком байт определись сам.

Вроде так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
             //uint - 4 байта 
            uint i32 = 0x000045C5;
            byte[] int32Bytes = { (byte)(i32), (byte)(i32 >> 8), (byte)(i32 >> 16), (byte)(i32 >> 24) };
 
            //наоборот
            byte[] bytesInt = { 0xC5, 0x45, 0x00, 0x00};
            uint bi = (uint)((bytesInt[3] << 24) & (bytesInt[2] << 16) & (bytesInt[1] << 8) & (bytesInt[0]));
 
            //ushort - 2 байта   
            ushort i16 = 0x45C5;            
            byte[] int16Bytes = { (byte)(i16), (byte)(i16 >> 8) }; 
 
            //наоборот
            byte[] bytesShort = { 0xC5, 0x45 };            
            ushort bs = (ushort)((bytesShort[1] << 8) & (bytesShort[0]));
1
22 / 22 / 10
Регистрация: 19.03.2015
Сообщений: 137
05.12.2015, 19:47  [ТС]
int вообще 4 байта
Знаю, тут логичнее было бы написать ushort, но это лишь для примера.
да и использовать лучше беззнаковые типы для таких целей
А со знаковыми так не выйдет? Я передаю данные по сети(в байтах разумеется), а если мне нужно будет, например, передать координаты? Они же могут быть как + так и -
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
05.12.2015, 19:58
Цитата Сообщение от Bushmeister Посмотреть сообщение
А со знаковыми так не выйдет?
Проверьте сами на знаковых типах, туда обратно погоняйте.
Сомнения вызывает конвертация отрицательных чисел, - тк имеет место быть дополнительный код.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
05.12.2015, 20:01
Цитата Сообщение от Woldemar89 Посмотреть сообщение
uint bi = (uint)((bytesInt[3] << 24) & (bytesInt[2] << 16) & (bytesInt[1] << 8) & (bytesInt[0]));
Woldemar89, а разве тут не дизьюнкция (|) нужна? Вы все зануляете здесь.
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
05.12.2015, 20:04
Цитата Сообщение от Bushmeister Посмотреть сообщение
Я передаю данные по сети(в байтах разумеется), а если мне нужно будет, например, передать координаты? Они же могут быть как + так и -
Проще использовать
Цитата Сообщение от Someone007 Посмотреть сообщение
BitConverter.GetBytes() / BitConverter.ToInt32()
Как раз для этого и предназначено.

А код выше действительно с ошибками.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
05.12.2015, 20:05
Цитата Сообщение от IamRain Посмотреть сообщение
а разве тут не дизьюнкция (|) нужна?
Конечно, спасибо за поправку.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
05.12.2015, 20:07
К примеру, в нагрузку: как корректно конвертировать 4 байта в Int32 (знаковый), не прибегая к помощи BitConverter.ToInt32 ?
А то утром была похожая тема: Из битов в двоичное представление числа
Как результат, фигней страдал (читай делал research) сегодня:
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
static void Main(string[] args)
        {
            var bytes = new byte[4];
            short highVal, lowVal;
            Int32 result;
            var random = new Random();
            int counter = 1000;
            
            while (counter > 0)
            {   
                random.NextBytes(bytes);
                lowVal = BitConverter.ToInt16(new[] { bytes[0], bytes[1] }, 0);
                highVal = BitConverter.ToInt16(new[] { bytes[2], bytes[3] }, 0);
 
                result = lowVal | (highVal << 16);
                
                var bitresult = BitConverter.ToInt32(bytes, 0);
 
                Console.WriteLine("Current pair: ");
                Console.WriteLine(result + " - " + Convert.ToString(result,16));
                Console.WriteLine(bitresult + " - " + Convert.ToString(bitresult,16));
                if (result != bitresult)
                {
                    Console.WriteLine("OOPS!!!");
                    break; 
                }
 
 
                Console.WriteLine(Environment.NewLine);
                Thread.Sleep(1000);
                counter--;
            }            
            
            Console.ReadKey();
        }
Ятп, никак. Верно?
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
05.12.2015, 20:13
Цитата Сообщение от IamRain Посмотреть сообщение
как корректно конвертировать 4 байта в Int32 (знаковый), не прибегая к помощи BitConverter.ToInt32 ?
Провести операции аналогичные операциям BitConverter - он же как то делает, я так понял.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
05.12.2015, 20:15
BitConverter unsafe использует: (http://referencesource.microso... adfffb155b)
C#
1
2
3
4
5
6
7
8
9
10
11
12
fixed( byte * pbyte = &value[startIndex]) {
                if( startIndex % 4 == 0) { // data is aligned 
                    return *((int *) pbyte);
                }
                else {
                    if( IsLittleEndian) { 
                        return (*pbyte) | (*(pbyte + 1) << 8)  | (*(pbyte + 2) << 16) | (*(pbyte + 3) << 24);
                    }
                    else {
                        return (*pbyte << 24) | (*(pbyte + 1) << 16)  | (*(pbyte + 2) << 8) | (*(pbyte + 3));                        
                    }
                }
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
05.12.2015, 20:16
тык
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
05.12.2015, 20:23

Не по теме:

Woldemar89, :D, и вообще это к float

.

Добавлено через 6 минут
То есть без unsafe никак?
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
05.12.2015, 20:28

Не по теме:

Цитата Сообщение от IamRain Посмотреть сообщение
и вообще это к float
Ну нажмакал, накопипастил что попало, подумаешь :)
Главное, мысли сошлись :)



Да и данные хоть как можно перекрошить - по своему - без BitConverter, - хоть свой протокол изобрести.
Главное, чтобы сервер и клиент поняли друг друга.

Ну, а по вопросу Bushmeister, думаю, все понятно - BitConverter.

Добавлено через 2 минуты
Цитата Сообщение от IamRain Посмотреть сообщение
То есть без unsafe никак?
Да хз - мне кажется можно, только мне лень думать
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
05.12.2015, 20:47
Цитата Сообщение от IamRain Посмотреть сообщение
К примеру, в нагрузку: как корректно конвертировать 4 байта в Int32 (знаковый), не прибегая к помощи BitConverter.ToInt32 ? Ятп, никак. Верно?
Вы неправильно конвертируете.
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
        static void Main(string[] args)
        {
            byte[] bytes = new byte[4];
            Random random = new Random();
            int counter = 1000;
 
            while (counter > 0)
            {
                random.NextBytes(bytes);
 
                int result = bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24;
 
                int bitresult = BitConverter.ToInt32(bytes, 0);
 
                Console.WriteLine("Current pair: ");
                Console.WriteLine(result + " - " + Convert.ToString(result, 16));
                Console.WriteLine(bitresult + " - " + Convert.ToString(bitresult, 16));
                if (result != bitresult)
                {
                    Console.WriteLine("OOPS!!!");
                    break;
                }
 
                Console.WriteLine(Environment.NewLine);
                Thread.Sleep(10);
                counter--;
            }
 
            Console.ReadKey();
        }
1
22 / 22 / 10
Регистрация: 19.03.2015
Сообщений: 137
07.12.2015, 14:07  [ТС]
Как-то Bitconverter не умеет нормально работать с ushort
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
        {
            byte[] test = BitConverter.GetBytes((ushort)256);
            for (int i=0; i<test.Length; i++)
                Console.WriteLine(test[i].ToString("X"));
            Console.WriteLine(BitConverter.IsLittleEndian);
            Console.Read();
        }
Вывод:
0
1
True

Но ведь 256 это 100 в hex.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
07.12.2015, 15:51
Так правильно же выводит, там байты 00 01.
0
22 / 22 / 10
Регистрация: 19.03.2015
Сообщений: 137
07.12.2015, 22:00  [ТС]
Неправильно, иначе второй байт при ToString("X") был бы 10.
Т.к. тут LittleEndian, должно быть не 10 00 а 00 10. Но никак не 00 01, иначе как в таком случае представить 1 (0x01) в двух байтах и little endian? Разумеется 00 01.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
07.12.2015, 22:07
Вы путаете порядок бит и порядок байт.

Два байта uint16 (256 в двоичке): 0000 0001 и 0000 0000

Вывод начиная с младшего:
0 (0000 0000)
1 (0000 0001)

Так что, все норм.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
07.12.2015, 23:11
Цитата Сообщение от Bushmeister Посмотреть сообщение
иначе как в таком случае представить 1 (0x01) в двух байтах и little endian? Разумеется 00 01.
Разумеется 01 00.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2015, 23:11
Помогаю со студенческими работами здесь

Как переконвертировать картинку из *.jpg ,например в *.dgb
Всем привет!) У меня такой вопрос: Как переконвертировать картинку из *.jpg ,например в *.dgb. А затем этот файл поместить в *.dat?

преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода
есть COM интерфейс с методом: virtual /* */ HRESULT STDMETHODCALLTYPE OnReceivePacket( /* */ long dwSize, ...

Пердача byte[] COM-функции, ожидающей ref byte
Привет, наше приложение в C# использует несколько COM-интерфейсов. В одном из них есть метод, которому передается ref byte : ...

wav byte[] в flac byte[]
Ситуация такая: С микрофона каждую 0.1 сек идет byte где то по 3к значений. Если я пишу его в файл то получается как бы wav файл....

Как переконвертировать данные для SQL?
Есть база данных в SQL Server. Делаю запись чисел из формы (поля input type=text) в ячейки таблицы с типом real методом Insert. Выдает...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru