文字列を数値に変換する関数とその使い方
実行風景
以下コード=====================================================
#include <tchar.h>
#include <string>
#include <math.h>//pow関数に必要
//プロトタイプ宣言
int CharacterToValue(std::string Character,int Forward,int Backward);//文字列の指定した範囲を数値に変換してreturnする関数
int main(void){
std::string SCI_pBufferRecieved;//受信した文字のバッファ
SCI_pBufferRecieved=_T("0123456789");
//格納されている文字列を数値に変換して格納する。
int AD_Result0 = CharacterToValue(SCI_pBufferRecieved,0,0);
int AD_Result1 = CharacterToValue(SCI_pBufferRecieved,1,1);
int AD_Result2 = CharacterToValue(SCI_pBufferRecieved,9,9);
int AD_Result3 = CharacterToValue(SCI_pBufferRecieved,0,9);
int AD_Result4 = CharacterToValue(SCI_pBufferRecieved,1,5);//前から、0から数え始めて1番目と5番目までの文字を数値に変換
int AD_Result5 = CharacterToValue(SCI_pBufferRecieved,3,6);
int AD_Result6 = CharacterToValue(SCI_pBufferRecieved,4,9);
int AD_Result7 = CharacterToValue(SCI_pBufferRecieved,0,8);
printf("%d\n",AD_Result0);
printf("%d\n",AD_Result1);
printf("%d\n",AD_Result2);
printf("%d\n",AD_Result3);
printf("%d\n",AD_Result4);
printf("%d\n",AD_Result5);
printf("%d\n",AD_Result6);
printf("%d\n",AD_Result7);
printf("\n\n\n");
SCI_pBufferRecieved=_T("00120");
int AD_Result10 = CharacterToValue(SCI_pBufferRecieved,0,4);
printf("%d\n",AD_Result10);
system("pause");
//system("pause > NUL");
return 0;
}
//指定された範囲の文字列を数値に変換する関数(ゼロ以上の整数限定)
int CharacterToValue(std::string Character,int Forward,int Backward){
//Forward:「前方の」から数えてForward番目の文字,Backward:(「前方の」から数えて)「後方の」Backward番目の文字
int Value=0;
for(int Number=Forward
, Power=(Backward-Forward); //これで両方ともintとして宣言されているはず。(異なる型の場合、このような宣言は不可。その場合は外で宣言する)
(Number<=Backward);
//(Number<=Backward)&&(Power>=(Backward-Forward)); //タイミングとしては同じになるハズなのでどちらか一方でOK
Number++, Power-- )//ここまでfor文
{
//Number:「数」の意味//[2]~[9]
//Power:「乗」の意味//10^7~10^0
Value += (Character[Number]-'0')*(int)pow((double)10,(double)Power);
//(SCI_pBufferRecieved[Number]-'0')でアスキーコード(文字コード)を数値に変換する。(何故こうなるのかはアスキーコード表を参照すれば分かるはず)
}
return Value;
}
//==================================================================
//実例に即して考えてみる
//
//■■□□□□□□□□■■
//[0]~[11]までの12文字
//□は8文字
//変数がそれぞれ次のように定義される時
//Forward=2 //ゼロから数え始めている事に注意!!
//Backward=9 //ゼロから数え始めている事に注意!!
//Backward-Forward=9-2=7
//□を数値に変換する場合
//
//Value=[2]*(10の(Backward-Forward)乗)
// +[3]*(10の(Backward-Forward-1)乗)
// +[4]*(10の(Backward-Forward-2)乗)
// +[5]*(10の(Backward-Forward-3)乗)
// +[6]*(10の(Backward-Forward-4)乗)
// +[7]*(10の(Backward-Forward-5)乗)
// +[8]*(10の(Backward-Forward-6)乗)
// +[9]*(10の(Backward-Forward-7)乗)←+[9]*(10の(0)乗)
//注意事項
//1.文字列は0番目から数え始めている。
//2.Forward<Backwardが成り立つ必要がある。
//3.半角数字以外を指定してはいけない
//4.変換できるのは0以上の整数だけ
0 件のコメント:
コメントを投稿