Member 13785296 Ответов: 1

Значение было либо слишком большим, либо слишком маленьким для байта без знака


Как это сделать. Кто-нибудь, помогите мне.

Что я уже пробовал:

private void timer1_Tick(object sender, EventArgs e)
     {
          item3.Azimuth++;
         label2.Text = item3.Azimuth.ToString();


         byte[] bytesToSend = new byte[7] { 0x7E, 0xD6, Convert.ToByte(item3.Azimuth  >> 8), Convert.ToByte(item3.Azimuth), 0x20, 0x00, 0x40 };
         port.Write(bytesToSend, 0, bytesToSend.Length);
     }

1 Ответов

Рейтинг:
2

OriginalGriff

Это говорит о том, что значение в Азимуте слишком велико для байта: оно превышает максимальное значение 0xFF или 255, которое может содержать значение байта.
Например:

int Azimuth = 0x1234;
byte b = Convert.ToByte(Azimuth);
Выбросит такую же ошибку.
Чтобы исправить это, замаскируйте его:
int Azimuth = 0x1234;
byte b = Convert.ToByte(Azimuth & 0xFF);
Или еще лучше:
int Azimuth = 0x1234;
byte b = (byte) (Azimuth & 0xFF);

В вашем коде это было бы так:
byte[] bytesToSend = new byte[7] {0x7E, 
                                  0xD6, 
                                  (byte) (item3.Azimuth >> 8), 
                                  (byte) (item3.Azimuth & 0xFF), 
                                  0x20, 
                                  0x00, 
                                  0x40};


CPallini

5.