Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
7 years, 2 months ago.
Converting a vector uint8_t so I can work with it.
Hello,
So I have been struggling for two days now but it seems there is no way to do this. I hope someone can proof me different. I have I following code:
std::vector<uint8_t> response;
if ((ret = dot->recv(response)) != mDot::MDOT_OK) { logError("failed to recv: [%d][%s]", ret, mDot::getReturnCodeString(ret).c_str()); } else {
logInfo("recv data: %s", response);
int cmd, value;
}
So I receive a message on my device which is now 1,20 (response) But it can also be like 1,20,3,2,1,2 The only thing I want is to convert this vector to a char so I can use sscanf to read out the data. Seems impossible for me.
I'm normaly a web developer, so I don't do alot with bits and bytes since it's not needed...
I hope someone can help me!
1 Answer
7 years, 2 months ago.
It's not the most efficient solution but you can convert the vector into a char array at which point you can use all of the standard c functions on it. You can access vectors in the same way as you do arrays so the code is fairly straight forward:
#define maxResponseLength 20 char dataIn[maxResponseLength+1]; // allow space for the null on the end int responseLen = response.size(); // check the length if (responseLen > maxResponseLength) responseLen = maxResponseLength; for (int i = 0; i<responseLen ; i++) { dataIn[i] = response[i]; } dataIn[responseLen] = 0; // add the termination // dataIn now contains the data from response but in a char array with a null terminator, the standard c string format.
This isn't going to be the fastest or most memory efficient solution but it is simple.
Also for future reference if you do
<<code>> your code <</code>>
then the formatting doesn't get messed up.
Hello Andy,
Thank you for responding. So I implemented your code, but this is the result.
char dataIn[20+1]; // allow space for the null on the end int responseLen = response.size(); // check the length if (responseLen > 20) responseLen = 20; for (int i = 0; i<responseLen ; i++) { dataIn[i] = response[i]; } dataIn[responseLen] = 0; // add the termination int cmd, value; sscanf(dataIn,"%d,%d",cmd,value); logInfo("cmd: %d, value: %d", cmd,value);
Result in console is: cmd: 536871392, value: 536871452 Should be: cmd: 1, value: 20
posted by 19 Dec 2017