简体   繁体   中英

c++ programming with linux

i am receiving a buffer with float values like -157.571 91.223 -165.118 -59.975 0.953 0 0.474 0 0 0.953 0 0.474 0.474 0 5.361 0 0 0.474 0 5.361...but they are in characters...now i want to retrieve one by one value and put it in a variable...can any one help me please...i have used memcpy but no use..if i am copying 8 bytes its taking as -157.571 with 8 values including '-' and '.' .... is there any solution for this ..

If I'm understanding correctly, you have a value stored in a string of some kind and you want to retrieve a floating point value out of it. If that is the case, it depends on the language you're using. If you're using C++, you should use a std::istringstream to perform the conversion. If you're using C, (and/or the cstdio system from C++ instead of iostream ), you should use sscanf . If you're using C#, you should be using Double.TryParse .

Let's say your buffer of floats is this string :

"-157.571 91.223 -165.118 -59.975 0.953 0 0.474 0 0 0.953 0 0.474 0.474 0 5.361 0 0 0.474 0 5.361"

your cleanest C++ approach is to load this into a std::istringstream and then use the stream to extract the float values.. ie

std::istringstream str(buffer);

now you can use the stream in operator to extract a float value, and repeat this until there are no more (hint: check the stream flags)

  str >> {float}; // then do something with {float}

Optionally you can push this extracted value in to a std::vector to give you the floats in the string. I've not written out the full code, just the pseudo to give you an idea...

You've got a string that contains a number of floating point values separated by a space.

If You could use strtof() to convert them to float values one at a time.

float strtof( const char *nptr, char **endptr);

where nptr is the string that you wish to convert and endptr is a pointer to a char pointer. endptr will contain the pointer to the last character that was converted, so can be used to walk through your string.

eg.

char *rawString;
char **walkPtr;
float convertedValue;

/* do something to collect the next series of floats */

/* and now do the conversions */
*walkPtr = rawString;
while( still_some_string_to_process )
{
    convertedValue = strtof( *walkPtr, walkPtr );

    // increment the pointer to skip over the delimiting space
    *walkPtr++;
}

Appropriate error checking should be applied to ensure you don't run off the end of the string, etc.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM