cancel
Showing results for 
Search instead for 
Did you mean: 

How to compare bytes received in a uint8_t?

NAlve.2450
Associate II

I have a STM32F103C8T card, I am developing an application that receives a byte array by usb / serial.

I have a variable "uint8_t USBBuffer;" in "usbd_cdc_if.c" which stores the bytes.

My question is: how can a non-vector variable receive an external multi-byte vector?

One of the vectors I get is this: {0x16, 0x16, 0x02, 0x00, 0x10, 0x03, 0x00, 0x00, 0x03}

I realized that I can store these bytes in a single index of a vector, eg: USBBuffer2 [0] = USBBuffer;

With this I can easily transmit USBBuffer2 with the CDC_Transmit function.

My question is, how is this vector stored in a uint8_t that is not a vector? how can i compare with another uint8_t variable?

Thanks in advance.

And I'm sorry if noob's question is that I'm just starting out in this universe.

5 REPLIES 5

Perhaps review chapter on pointers in C?

&USBBuffer​ would be the address for a uint8_t one byte array

Y​ou can use memcmp() to compare one or multiple bytes in memory.

Or do

if (a == x[i]) puts("same");

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
NAlve.2450
Associate II

I have tried memcmp and have not been successful.

I've tried comparing with "if (var1 [i] == USBBuffer [i])" but as I mentioned earlier all bytes are in USBBuffer [0] and var1 [] = {0x16, 0x16, 0x02, 0x00, 0x10, 0x03 , 0x00, 0x00, 0x03}.

The problem is, I can't print USBBuffer to know how bytes are saved.

This would be easily solved if I have been using the Arduino IDE, but unfortunately my external application does not recognize my STM32 card if it is not recorded with STM32cubeIDE, I still can't figure out why.

>>I have tried memcmp and have not been successful.

Probably because you're trying to compare one thing against a dozen things.

uint8_t USBBuffer = 0x12;

printf("%02X\n", USBBuffer);

Or make a memory dumping function

dumpdata(16, &USBBuffer); // The byte that USBBuffer holds, and those surrounding it

>>I've tried comparing with "if (var1 [i] == USBBuffer [i])" but as I mentioned earlier all bytes are in USBBuffer [0] and var1 [] = {0x16, 0x16, 0x02, 0x00, 0x10, 0x03 , 0x00, 0x00, 0x03}.

Ok, but there's only ONE byte in your application of USBBuffer, you're going to have to accumulate bytes if you want to compare against multiples.

// Does byte match vector/array index i

if (var1 [i] == USBBuffer) printf("Byte Level match at %d\n", i);

// Accumulate a byte into an array

uint8_t BiggerBuffer[100], *p = BiggerBuffer;

...

*p++ = USBBuffer; // For each received byte to fill array

Trick here is

a) Understand data representation in memory properly

b) Learn C, variables, arrays

c) Learn Pointers

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..

I really have a lot to learn yet, probably USBBuffer is just a pointer, I will deepen my studies in C.

Thank you very much.

Dear friend, thank you so much for your help, I finally managed to make the code.

I was trying to compare a single byte with an entire vector, I had no idea how fast this chip was processing.

Thanks again.