2

文字列「1234」を指すポインター lpBegin があります。今、この文字列を uint と比較したいのですが、scanf を使用せずにこの文字列を符号なし整数にするにはどうすればよいですか? 文字列番号が 4 文字の長さであることはわかっています。

4

8 に答える 8

1

機能を使用できますstrtoul()。strtoul は「String to unsigned long」を表します。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char lpBegin[] = "1234";
    unsigned long val = strtoul(lpBegin, NULL, 10);

    printf("The integer is %ul.", val);


    return 0;
}

詳細については、 http : //www.cplusplus.com/reference/clibrary/cstdlib/strtoul/ を参照してください。

于 2012-09-14T08:13:04.357 に答える
1

機能を使用する必要がありatoiます。これは へのポインタを取り、charを返しますint

const char *str = "1234";  
int res = atoi(str);  //do something with res

他の人が言ったように、私が知らなかったatoiのは、フォーマットエラーが発生したときに何が起こるかが未定義であるため、推奨されないということです。strtoul他の人が提案したように、より良い使用法。

于 2012-09-14T08:10:00.727 に答える
1

確かに使いやすいatoi()。

stdlib.h を含めることを忘れないでください。

于 2012-09-14T08:14:20.987 に答える
1

を使用できますstrtoul(lpBegin)が、これはゼロで終わる文字列でのみ機能します。

なんらかの理由で stdlib を使用したくない場合で、ターゲット システムが確実にわかっている場合は、数値の変換を手動で行うことができます。これは、シングル バイト エンコーディング (Latin、ISO-8859-1、EBCDIC など) を使用している限り、ほとんどのシステムで動作するはずです。UTF-16 で動作させるには、'char' を 'wchar_t' (または必要なもの) に置き換えます。

unsigned long sum = (lpbegin[0] - '0') * 1000 +
                    (lpbegin[1] - '0') * 100 +
                    (lpbegin[2] - '0') * 10 +
                    (lpbegin[3] - '0');

または長さが不明な数値の場合:

char* c = lpBegin;
unsigned long sum = 0;
while (*c >= '0' && *c <= '9') {
    sum *= 10;
    sum += *c - '0';
    ++c;
}
于 2012-09-14T08:20:59.403 に答える
0

atoi() http://www.elook.org/programming/c/atoi.htmlを探すと思います

于 2012-09-14T08:09:50.237 に答える
0

strtoul「string to unsigned long」という関数を使用する必要があります。これは stdlib.h にあり、次のプロトタイプがあります。

unsigned long int strtoul (const char * restrict nptr,
                           char ** restrict endptr,
                           int base);
  • nptr文字列です。
  • endptr関数が有効な数値の読み取りを停止した場所を示すオプションのパラメーターです。これに関心がない場合は、このパラメーターに NULL を渡してください。
  • base文字列の数値形式です。つまり、10 進数は 10、16 進数は 16、2 進数は 2 などです。

例:

#include <stdlib.h>
#include <stdio.h>


int main()
{
  const char str[] = "1234random rubbish";
  unsigned int i;
  const char* endptr;

  i = strtoul(str,
              (char**)&endptr,
              10);

  printf("Integer: %u\n", i);
  printf("Function stopped when it found: %s\n", endptr);

  getchar();

  return 0;
}

atoi()について。

atoi() は内部的に基数 10 で strtoul を呼び出すだけです。ただし、atoi() がフォーマット エラーに遭遇した場合に何が起こるかを C 標準が定義していないため、atoi() は推奨されません。atoi() はクラッシュする可能性があります。したがって、常に strtoul() (および他の同様の strto... 関数) を使用することをお勧めします。

于 2012-09-14T08:25:05.323 に答える
0

文字列の長さが 4 桁であることが確実であり、(何らかの理由で) ライブラリ関数を使用したくない場合は、それをハードコーディングできます

const char *lpBegin = "1234";
const unsigned int lpInt = 1000 * (lpBegin[0] - '0') +
                            100 * (lpBegin[1] - '0') +
                             10 * (lpBegin[2] - '0') +
                              1   (lpBegin[3] - '0');

もちろん、egを使用することstrtoul()非常に優れているため、ライブラリが利用可能な場合はそれを使用してください。

于 2012-09-14T08:26:51.277 に答える
0

strtolatoi、より優れたエラー処理よりも優れています。

于 2012-09-14T08:15:26.180 に答える