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.

### 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

'MAIN PROGRAMM
BeginProg

'Configure RS232 Sensirion MFCs for  flows
'SerialOpen(ComC5,19200,19,0,200,0)

Scan (500,mSec,100,0)
' Measure System parameters

'SerialInBlock (ComC5,O3flow_in1,36)

'O3flow_in2=Hex(O3flow_in1)

'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.

NextScan

EndProg
```

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
BeginProg
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
EndIf
Flow = tempInteger / 70

NextScan
EndProg```