#vb.net #arduino
Вопрос:
У меня возникает такая проблема: операция арифметического переполнения
Пожалуйста, скажите, что не так, большое спасибо
'I will read 999 ASCII chars from the serial buffer
'999 char * 255 max value of ASCII = 254,745
'For 254,745 I will need Long to handle this size
'I used Long to handle the big sum of the received data so I will not get
'summation overflow
Dim int_sum_of_packet As Long = 0
'I took the data from serial buffer and saved it into string
'string name is = str_packet_data_without_delimiter
'Get each char inside the received string
For Each ch As Char In str_packet_data_without_delimiter
'do the summation
int_sum_of_packet = int_sum_of_packet Convert.ToByte(ch)
Next
'Now get the LSB (least significant Byte)
'Note: Long data type is 8 Bytes
Dim lsb As Byte
lsb = CByte(amp;H000000FF amp; int_sum_of_packet)
Комментарии:
1. Комментарий неверен,
Long
составляет 8 байт (это всего 4 байта в VBA и старых версиях VB, где основным языком является VBA). Вам может потребоваться, чтобы целочисленная математика была явно без знака, т. Е., возможно, потребуетсяULong
илиUInteger
.2.
amp;
является конкатенацией строк, такamp;H000000FF amp; int_sum_of_packet
что это то же самое, что"255" amp; int_sum_of_packet.ToString()
. Очевидно, вы хотелиAnd
. ИспользуйтеOption Strict On
, чтобы избежать этой проблемы.3. кажется, я путаю C с vb.net , большое спасибо , я постараюсь , Спасибо вам , ребята, с большой любовью.
4. Это сработало , большое спасибо.