2010-11-26 75 views
-1

我正在接收一个浮点数值类似于-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 ...但它们是以字符形式的......现在我想检索一个接一个的值,并把它放在一个变量中...任何一个都可以帮助我...我使用了memcpy,但没有使用..如果我复制8个字节,其取值为-157.571和8个值包括' - '和'。' ....是否有任何解决方案..使用linux进行C++编程

+1

C++或C#?这个问题没有道理。 – 2010-11-26 05:59:03

+1

有人很可怕,非常困惑。 – 2010-11-26 05:59:34

回答

1

如果我理解正确,你有一个存储在某种类型的字符串中的值,你想从中检索浮点值。如果是这种情况,则取决于您使用的语言。如果您使用C++,则应使用std::istringstream执行转换。如果您使用C(和/或来自C++的cstdio系统而不是iostream),则应该使用sscanf。如果您使用的是C#,则应该使用Double.TryParse

+0

我已经使用sscanf但没有用...你可以发送一个简单的例子..在C++ – bindu 2010-11-26 06:02:10

0

您有一个字符串,其中包含许多由空格分隔的浮点值。

如果您可以使用strtof()将它们一次一个地转换为float值。

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

where nptr是您希望转换的字符串,而endptr是指向字符指针的指针。 endptr将包含指向已转换的最后一个字符的指针,因此可用于遍历字符串。

例如。

 
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++; 
} 

相应的错误检查应适用,以确保你不跑的字符串的结束,等

1

比方说,你的花车的缓冲区是这个字符串

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

您的干净的C++方法是本加载到std::istringstream,然后使用该流来提取浮子个值..即

std::istringstream str(buffer); 

现在你可以使用流中的操作人员提取浮点值,并重复这一点,直到没有更多的(提示:检查流标志)

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

可选您可以将此提取的值推送到std::vector以为您提供字符串中的浮点数。我没有写出完整的代码,只是伪给你一个想法...