Преобразование числа больше 255 в байтовую переменную - PullRequest
0 голосов
/ 18 мая 2011

Я понимаю концепцию байтов и объявления переменных для экономии места обработки.Я понимаю, что максимальное значение, которое может быть сохранено в байте, составляет 255.

Я не могу обернуться вокруг своей текущей проблемы и надеялся, что кто-то сможет обучить меня и помочь мне решить эту проблему,У меня нет большого опыта работы с манипулированием байтами.

Мне дали проект для обновления, и мне сказали, что служба, которая передает данные в мой проект, начнет использовать 2 байта для передачи идентификатора, а не 1.байт ранее, так как их параметры выросли.

Текущее объявление для переменной:

Dim bytvariable As Byte = 0

Что такое новое объявление для принятия двухбайтового значения?

Во-вторых, как я смогу преобразоватьэто 2-байтовое значение в целое число?

Например, они передают мне это значение: 0x138, и оно должно быть 312.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 18 мая 2011

Вот сводка «примитивных» типов данных в .NET и их размеров.

Да, Int16, вероятно, то, что вы хотите.

Часто вы читаете двоичные данные из потока или получаете их из массива байтов. Чтобы преобразовать эти источники в Int16, вы можете сделать это:

в C #:

byte[] block = new byte[128];
mystream.Read(block, 0, block.Length);
int i = 0;
Int16 value = (Int16)(block[i++] + block[i++] * 256);

В VB.NET это будет:

Dim block as New Byte(128)
stream.Read(block, 0, block.Length)
Dim i as Int16 = 0
Dim value As Short = CShort((block(i) + (buffer(i+1) * &H100)))
i = i + 2

(мне кажется)

1 голос
/ 18 мая 2011

Вы можете попробовать это:

Dim bytvariable As Byte(0 To 1)

bytvariable(0) = ' Get the first byte however they are sending it
bytvariable(1) = ' Get the second byte however they are sending it
Dim value As Int16 = BitConverter.ToInt16(buffer, 0);
1 голос
/ 18 мая 2011

от макушки головы я бы посоветовал, если бы вы настаивали на том, чтобы делать это таким образом (вместо простой передачи целого числа), вы могли бы использовать массив байтов, первый индекс, содержащий первое число, и второй индекс, второйех.byte [0] = 123, byte [1] = 255;

, затем объединить их в строку ex.строка concatenatedNumber = byte [0] .ToString () + byte [1] .ToString ();тогда разбери его ex.int ID = Int32.Parse (concatenatedNumber);

Примеры на C #, но я думаю, вы должны понять эту идею.Я определенно предпочел бы просто передать его как целое число.

...