在C++中,atof
函數是用于將字符串轉換為浮點數的。然而,atof
函數本身并不支持直接處理多種進制。你需要先將字符串轉換為統一的進制,然后再使用atof
函數將其轉換為浮點數。
以下是一個示例,展示了如何將一個表示十六進制或十進制數的字符串轉換為浮點數:
#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
bool isHex(const std::string& str) {
for (char ch : str) {
if (!((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F'))) {
return false;
}
}
return true;
}
float convertStringToInt(const std::string& str, bool isHex) {
std::stringstream ss;
if (isHex) {
ss << std::hex << str;
} else {
ss << std::dec << str;
}
return std::stof(ss.str());
}
int main() {
std::string input = "1a"; // 可以是十六進制或十進制
bool isHex = isHex(input);
float result = convertStringToInt(input, isHex);
std::cout << "轉換結果: " << result << std::endl;
return 0;
}
在這個示例中,我們首先定義了一個isHex
函數,用于檢查輸入字符串是否為有效的十六進制數。然后,我們定義了一個convertStringToInt
函數,它接受一個字符串和一個布爾值,表示字符串是十六進制還是十進制。根據這個布爾值,我們使用std::hex
或std::dec
操縱符將字符串轉換為整數,然后使用std::stof
函數將其轉換為浮點數。