2010-11-26 43 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以爲您提供字符串中的浮點數。我沒有寫出完整的代碼,只是僞給你一個想法...