B4R Question Failed to convert string to int correctly...

hatzisn

Well-Known Member
Licensed User
Hi everybody,

I am completely lost with this... I download a string from my site which looks like this "0~20200105~152425". I try to convert the first character to an int. How can someone explain this nonsense? See the following code in JobDone Sub and the logs.

B4X:
    If Job.Success Then
        Dim bc As ByteConverter
        Log("Response: ", bc.SubString2(Job.Response, 0, Min(200, Job.Response.Length))) 'truncate to 200 characters

'        Log(bc.SubString2(Job.Response,0,1))
'        Log(bc.SubString2(Job.Response,2,6))
'        Log(bc.SubString2(Job.Response,6,8))
'        Log(bc.SubString2(Job.Response,8,10))
'        Log(bc.SubString2(Job.Response,11,13))
'        Log(bc.SubString2(Job.Response,13,15))
'        Log(bc.SubString2(Job.Response,15,17))


        Dim s As String
        s = bc.SubString2(Job.Response,0,1)
        Log(s)
        iDoW = Bit.ParseInt(s, 10)
        Log(iDoW)
        If iDoW = 0 Then iDoW = 7
        Log(iDoW)

    End if



DEBUG StatusLogger Appender Console stopped with status true
TRACE StatusLogger XmlConfiguration stopped 2 remaining Appenders.
TRACE StatusLogger XmlConfiguration cleaning Appenders from 2 LoggerConfigs.
DEBUG StatusLogger Stopped XmlConfiguration[location=jar:file:/C:/B4X/Tools/B4R/arduino-1.8.10/lib/pde.jar!/log4j2.xml] OK
DEBUG StatusLogger Stopped LoggerContext[name=af3868, org.apache.logging.log4j.core.LoggerContext@10ab13f] with status true
********************* PROGRAM STARTING ****************
@��`���-z��RS��{̍ʕ�X��B)�E#���ر$�X�̟f蘜ᄦD�ᄦD��ZME��mAppStart
Connected to router.
*******************************
JobName: Example
Response: 0~20200105~152425
1073686188
9900
9900

I have an intuition that it has to do with the fact that the site sends data communication in UTF8 but I do not know how to face it... I use a WeMos D1 V3

Thanks in advance
 
Last edited:

Erel

Administrator
Staff member
Licensed User
I'll help you.

1. bc.SubString will return an array of bytes.
2. Arrays of bytes cannot be implicitly cast to strings. You should see a warning about it.
3. In this case you do need a string as only strings can be parsed to numbers.
4. Use bc.StringFromBytes to get a string:
B4X:
Dim s As String = bc.StringFromBytes(bc.SubString2(Job.Response, 0, 1))
'or directly to a number:
Dim i As Int = bc.StringFromBytes(bc.SubString2(Job.Response, 0, 1))

You should see a compiler warning. It will not appear in the logs.
 
Upvote 0
Top