user3048644
user3048644

Reputation: 93

Sending Hex value in win32 not working similar to c++ code

I have c++ code as follows to display hex value from int array.

#include <iostream>
using namespace std;

int main()
{
    int binText[32]={1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1};
    char temp[255]={0};
    for (int i=0; i<32; i++)
    {
        sprintf(&temp[strlen(temp)], "%d", binText[i]);
    }
    char HexBuffer[255];
    unsigned long long int Number = 0;
    int BinLength = strlen(temp);

    for(int i=0; i<32; i++)
    {
        Number += (long int)((temp[32 - i - 1] - 48) * pow((double)2, i));
    }

    ltoa(Number, HexBuffer, 16);
    cout << HexBuffer <<endl;
}

its output is: af1af5f1 So this code converted the binary digit stored in int array into hex value.

But when i tried to use this same code to send the hex value in serial communication using win32 . it is not sending the correct hex value. the code is

    serialObj.begin("COM1", 9600); //opens the port
    int binText[32]={1,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1};
    char temp[255]={0};
    for (int i=0; i<32; i++)
    {
        sprintf(&temp[strlen(temp)], "%d", binText[i]);
    }
    char HexBuffer[255];
    unsigned long long int Number = 0;
    int BinLength = strlen(temp);

    for(int i=0; i<32; i++)
    {
        Number += (long int)((temp[32 - i - 1] - 48) * pow((double)2, i));
    }

    ltoa(Number, HexBuffer, 16);
    serialObj.send(HexBuffer);

    serialObj.close();//closes the port

The "send" function invoked by "serialObj.send(HexBuffer);" is as below:

void serial::send(char data[])
{
    DWORD dwBytesWrite;
    WriteFile(serialHandle, data, 4, &dwBytesWrite, NULL);
}

But the data it is sending is : "61 66 31 61". I couldnot figure out why it is giving this output .

The "send" function "serialObj.send" works properly for following code

char str[4]={0x24,0x24,0x53,0x3F};
serialObj.send(str);

and it sends 24 24 53 3F.

So i want to send AF 1A F5 F1 from the above the binary digit stored in the int array(shown above). how can i do this

Upvotes: 0

Views: 673

Answers (1)

Greg Hewgill
Greg Hewgill

Reputation: 992707

If you want to send the actual binary bits, don't call ltoa at all:

serialObj.send((char *)&Number);

Note that Number is declared as long long, which is likely 64 bits, which isn't going to fit in the 4 bytes sent by your serial::send() function.

Upvotes: 1

Related Questions