字符串转换为int

时间:2012-09-14 08:07:49

标签: c pointers

我有一个指针lpBegin指向一个字符串“1234”。现在我希望这个字符串与一个uint比较如何在不使用scanf的情况下将此字符串设为无符号整数?我知道字符串数字是4个字符长。

8 个答案:

答案 0 :(得分:1)

您必须使用atoi功能。这会指向char并返回int

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

正如其他人所说,我不知道的是,不推荐使用atoi,因为未定义格式化错误发生时会发生什么。因此,如其他人所建议的那样,更好地使用strtoul

答案 1 :(得分: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/

答案 2 :(得分:1)

绝对是atoi(),它易于使用。

不要忘记包含stdlib.h。

答案 3 :(得分:1)

您可以使用strtoul(lpBegin),但这仅适用于以零结尾的字符串。

如果您不想出于任何原因使用stdlib并且您对目标系统非常肯定,则可以手动进行数字转换。 只要它们使用单​​字节编码(例如拉丁语,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;
}

答案 4 :(得分:0)

答案 5 :(得分:0)

strtol优于atoi,具有更好的错误处理能力。

答案 6 :(得分: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表示十进制,16表示十六进制,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()内部只调用strtoul with base 10.然而不推荐使用atoi(),因为C标准没有定义当atoi()遇到格式错误时会发生什么:atoi()可能会崩溃。因此,最好总是使用strtoul()(以及其他类似的strto ...函数)。

答案 7 :(得分: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');

当然,使用例如strtoul() 非常优越,所以如果您有可用的库,请使用它。