Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переменную из массива / 8 сообщений из 8, страница 1 из 1
04.06.2015, 11:24
    #38975983
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
Собственно, довольно примитивный вопрос - есть байтовый массив в котором содержатся старший и младший байт, которые нужно присвоить переменной типа Short.

Ну, например, в языках для микроконтроллеров это пишется примерно так:

s.byte0 = m(0)
s.byte1 = m(1)

А как это лучше сделать в NET? Сейчас делаю программу для VB.NET...
...
Рейтинг: 0 / 0
04.06.2015, 11:29
    #38975991
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
...
Рейтинг: 0 / 0
04.06.2015, 11:47
    #38976022
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
Независимо от языка
Код: c#
1.
s =  m(0) + m(1) * 256


*256 можно заменить битовым сдвигом на 8 бит.
Код: c#
1.
s =  m(0) + (m(1) << 8)
...
Рейтинг: 0 / 0
04.06.2015, 13:40
    #38976198
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
> Независимо от языка

А вы попробуйте выполнить. Для m(0) = 255 и m(1)=255, к примеру.
...
Рейтинг: 0 / 0
04.06.2015, 13:42
    #38976202
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
>BitConverter

Это обратная операция тому что нужно...
...
Рейтинг: 0 / 0
04.06.2015, 13:46
    #38976211
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
AndrF>BitConverter

Это обратная операция тому что нужно...
Батенька, это вообще то класс.
...
Рейтинг: 0 / 0
04.06.2015, 13:56
    #38976224
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
>Батенька, это вообще то класс.

Спасибо, разобрался:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
        Dim m(1) As Byte, s As Short

        m(0) = 255
        m(1) = 255

        s = BitConverter.ToInt16(m, 0)

        Debug.Print(s)
...
Рейтинг: 0 / 0
04.06.2015, 14:12
    #38976247
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переменную из массива
AndrF> Независимо от языка

А вы попробуйте выполнить. Для m(0) = 255 и m(1)=255, к примеру.
Если Short это двухбайтовое знаковое целое, то будет переполнение, в результате скорее всего будет -1
для беззнакового все работает
Код: c#
1.
2.
3.
            Byte[] m = new Byte[] { 255, 255 };
            UInt16 s = (UInt16)(m[0] + m[1] * 256);
            Console.WriteLine(s); // 65535


Так тоже работает
Код: c#
1.
UInt16 s = (UInt16)(m[0] + (m[1] << 8));
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переменную из массива / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]