2009-09-30 22 views

答えて

15

std::strtoul()は1です。そしてもう一度、古いものがatoi()のようにあります。

+2

アトイは署名しませんが、そうですか? Windows CRTでは、オーバーフローが発生した場合にエラー(ERANGE)を返します。 – Cheeso

+0

Cheeso、はい、私が "i"で分かるものはintです;-) –

11

ブーストはlexical_castを提供します。

また
#include <boost/lexical_cast.hpp> 
[...] 
unsigned int x = boost::lexical_cast<unsigned int>(strVal); 

、あなたは(のlexical_castは、カバーの下に何をするかは基本的である)にstringstreamを使用することができます。

#include <sstream> 
[...] 
std::stringstream s(strVal); 
unsigned int x; 
s >> x; 
+1

小数点以外の解釈が必要な場合は、以下も参照してください:http://stackoverflow.com/questions/1070497/c-convert- 16進文字列から符号付き整数 – Martin

+0

私はストリーム挿入を愛するが、ストリーム抽出を嫌う唯一の人ですか?私は毎回関数を使用しています(このようなものを増強することは正直言っても、おそらくまだatoiを考えずに使用します)。 – Steve314

+0

ええ、ストリームの抽出はかなり醜いです。特に、定数を初期化できないためです。マニピュレータを使ってベースなどを変更することもできるので、かなり強力です。 – Martin

-3

どうint atoi (const char * str)は?

string s("123"); 
unsigned u = (unsigned)atoi(s.c_str()); 
+5

これはまったく良い提案ではありません。彼は特に "unsigned int"を要求し、 "_ultoa"のようなものについて言及しています。ポスターはatoi()やatol()などを知っています。これらの関数はすべて署名され、 - 記号を認識し、オーバーフローを処理するかもしれません。正しい答えはstrtoulのような関数を使うことです。 – Armentage

1

sscanfあなたが望むことをします。

char* myString = "123"; // Declare a string (c-style) 
unsigned int myNumber; // a number, where the answer will go. 

sscanf(myString, "%u", &myNumber); // Parse the String into the Number 

printf("The number I got was %u\n", myNumber); // Show the number, hopefully 123 
+0

私はscanfファミリをCでも嫌っていました。私がやりたかったことは決してしませんでした。ほとんどの場合、バグが発生しました。文字列が要件に合っていることが分かっていればOKです。既にチェックしたことや他のコードで抽出したものですが、その場合はatoiなどを使用しないでください。 誰かがscanf-family関数を使用している人 - うわー、刑罰は絶対に厳しくすることのできない犯罪もあります;-) – Steve314

+0

「C++でscanf-family関数を使用する人は...」 – Steve314

0

あなたは_atoi64

unsigned long型リットル= _atoi64(文字列)を経由して行く場合、それは動作します。

関連する問題