Bug? Byte arrays and "Select Case"

Discussion in 'iOS Bugs & Wishlist' started by ema01, Jul 18, 2019.

  1. ema01

    ema01 Member Licensed User

    I think i found a bug with select case.
    I'm using B4i V5.30 but this has been there from before, because i remember writing a workaround in a hurry many months ago.

    I have a set of bytes that come from a bluetooth communication, i put the bytes in a byte array ("frame") and the byte array in a list.
    So far so good.

    Then the head of the frame (byte in position zero) is checked in a Select Case statement to select how to interpret the following data.

    However, the app wasn't entering the required case and i had to work around it by doing an IF check in the "case else" statement.

    This is the code i used to test (I apologize for not going up to 255 but this is enough, i had problems with value "144")

    Code:
    'Test byte
       Dim tstByte(6As Byte
      
       tstByte(
    0) = 0
       
    For idx = 0 To 159
           tstByte(
    0) = idx
           
    Select Case tstByte(0)
               
    Case 0,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,36,37,38,39,40,41,42,43,44,45,46,47,48,49
                   
    Log(tstByte(0) & " Correct")
               
    Case 50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
                   
    Log(tstByte(0) & " Correct")
               
    Case 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129
                   
    Log(tstByte(0) & " Correct")
               
    Case 130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
                   
    Log(tstByte(0) & " Correct")
               
    Case Else
                   
    Log(tstByte(0) & " Wrong")
           
    End Select
       
    Next
      
       
    Dim tstSingleByte As Byte
      
       tstSingleByte = 
    0
       
    For idx = 0 To 159
           tstSingleByte = idx
           
    Select Case tstSingleByte
               
    Case 0,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,36,37,38,39,40,41,42,43,44,45,46,47,48,49
                   
    Log(tstSingleByte & " Correct")
               
    Case 50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
                   
    Log(tstSingleByte & " Correct")
               
    Case 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129
                   
    Log(tstSingleByte & " Correct")
               
    Case 130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
                   
    Log(tstSingleByte & " Correct")
               
    Case Else
                   
    Log(tstSingleByte & " Wrong")
           
    End Select
       
    Next
    The behaviour is different in the two cases for values over 127.

    for tstSingleByte the logs are
    Code:
    127 Correct
    -
    128 Correct
    because in B4i bytes are signed (would have preferred unsigned bytes but whatever.)

    for tstByte(0) instead
    Code:
    127 Correct
    128 Wrong
    And here we see that the byte is interpreted as UNSIGNED and the comparison fails.
    checking the byte with "if" instead works correctly.

    the B4A version of the application doesn't have this issue
     
  2. Erel

    Erel Administrator Staff Member Licensed User

    Confirmed.

    It is a debugger bug. Note that t will not happen in release mode and it will not happen in debug mode when the code "is not dirty" (no breakpoints in the relevant sub and the code was not modified since the last full compilation).
     
    ema01 likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice