ショッピングモール  Personal Health / Men's Health ( Hair Loss )


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4823

文字列を数値に変換
投稿者---Sera(2005/11/10 11:51:48)


おせわになります。
さっそくですが、数字文字列をunsigned long型に変更するための
APIか標準関数などは用意されているのでしょうか?
atoiやatolではunsignedにできず数値が負数になってしまうので
困っています。。。

WinXp sp2 / VC++6



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列を数値に変換 4824 Blue 2005/11/10 11:58:45
<子記事> Re:文字列を数値に変換 4825 chu- 2005/11/10 12:18:22


No.4824

Re:文字列を数値に変換
投稿者---Blue(2005/11/10 11:58:45)


>atoiやatolではunsignedにできず数値が負数になってしまうので
どのようにして確認していますか?


この投稿にコメントする

削除パスワード

No.4825

Re:文字列を数値に変換
投稿者---chu-(2005/11/10 12:18:22)


数字→数値変換はエラー処理をしやすい以下の関数が便利です。
strtol:符号付き,strtoul:符号無し,strtod:浮動小数点


この投稿にコメントする

削除パスワード

No.4827

Re:文字列を数値に変換
投稿者---Sera(2005/11/10 13:52:44)


ご返信ありがとうございます。

チェックは以下のようにprintfで行っています
IsStrDigit関数は自作で文字列の内容がすべて数字だった場合
真を返します。


//文字列が数字だけかチェック
if( IsStrDigit(id) ){ 
    //数値に変換

    dwID = atoi( id );
    printf("%s %d\n",id,dwID);
}




>数字→数値変換はエラー処理をしやすい以下の関数が便利です。
>strtol:符号付き,strtoul:符号無し,strtod:浮動小数点

strtoul関数を検索し以下のサイトの情報からstrtoul関数を
以下のように呼び出して見たのですがdwIDの中身が負数が
格納されていました。

dwID = strtoul( id, &pNoDigit, 0 );
printf("%s\n",pNoDigit);
printf("%d\n",dwID);


結果が以下のようになりました
入力値
2147483648
出力値
-2147483648

入力値
2147483647
出力値
2147483647

入力値
42949672945
出力値
-1


基数の指定が間違っているのでしょうか?
よろしければ、ご教授をお願いします。
http://www.bohyoh.com/CandCPP/C/Library/strtoul.html



この投稿にコメントする

削除パスワード

No.4829

Re:文字列を数値に変換
投稿者---Blue(2005/11/10 14:07:46)


printf書式指定文字(の一部分)

%d ---  int型の符号つき10進数の値
%u ---  int型の符号なし10進数の値

%lu --- long int 型の符号なし10進数の値



この投稿にコメントする

削除パスワード

No.4835

解決
投稿者---Sera(2005/11/10 16:17:10)


>
printf書式指定文字(の一部分)

%d ---  int型の符号つき10進数の値
%u ---  int型の符号なし10進数の値

%lu --- long int 型の符号なし10進数の値


ご返信ありがとうございます。
ご指摘いただいた通りの%uで正常に表示されました。
符号なし整数型の変数を符号付10進数で表示していた為
負数に見えたということですね;

初歩的なミスですみませんでした。

strtoulでも正常に表示されました。
以下修正したコード部分です

/*atoi*/
//文字列が数値以外でないかチェック

if( IsStrDigit(id) ){ 
  //数値に変換
  dwID = atoi( id );
  printf("%u\n",dwID);
}

/*strtoul*/
dwID = strtoul( id, &pNoDigit,0 );
printf("NoDigit: %s\n",pNoDigit);
printf("%u\n",dwID);


ありがとうございました


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity