Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.

Log in or register to post/reply in the forum.

How to convert hexadecimal to binary CR1000X

tronix Nov 29, 2022 10:13 AM

I have a program to read out the data from a sensor using RS232. According to the manufacturer the 4-byte hex output from the sensor should be converted to a two's complement, converted to a decimal and then divided by 70 to get the correct flow. 

Unfortunately I cannot find any command oin CRBASIC that handles convertion of hex or dec to binary which would be the easiest way to find the two's complement. I have tried subtracting each byte from F and adding 1 but this is not giving the correct result.

Does anyone have any idea how I can do this? Below is my example code.


'CR1000X Series Datalogger

'Sensirion ASF1430 MFC for O3 flow
Public O3flow(1) As String *36
Public O3flow_in1 As Long
Public O3flow_in2 As String *36

Units O3flow = sccm


  'Configure RS232 Sensirion MFCs for  flows
  Scan (500,mSec,100,0)
    ' Measure System parameters
    'Read Sensirion flow meter:

    'SerialInBlock (ComC5,O3flow_in1,36)


    'SplitStr (O3flow(),O3flow_in2,"7F7F",1,4)

    'Use O3flow=87AE to test
    O3flow()= "87AE"

    'Get two's complement:

    O3flow()=&HF -O3flow(1,1,1) & &HF- O3flow(1,1,2)& &HF- O3flow(1,1,3)& &HF- O3flow(1,1,4) + &H1

    O3flow()=HexToDec(O3flow())/70    '70 is the calibration factor.




JDavis Dec 2, 2022 10:42 PM

Sounds like a 16 bit signed integer.


Public FlowString As String * 4 = "87AE"
Public tempInteger As Long

Public Flow As Float

'Main Program
  Scan (1,Sec,0,0)

    tempInteger = HexToDec(FlowString)

    If tempInteger AND &h8000 Then 'Check sign bit  'Alternative check: If tempInteger > 32767 Then
      tempInteger = tempInteger - 65536 'A shortcut for flipping bits correctly
    Flow = tempInteger / 70



Log in or register to post/reply in the forum.