2

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

4

8 回答 8

1

您将不得不使用该atoi功能。这需要一个指向 a 的指针char并返回一个int.

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

正如其他人和我不知道的那样,atoi不建议这样做,因为它未定义发生格式错误时会发生什么。strtoul所以像其他人建议的那样更好地使用。

于 2012-09-14T08:10:00.727 回答
1

您可以使用该strtoul()功能。strtoul 代表“字符串到无符号长”:

#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() ,它易于使用。

不要忘记包含 stdlib.h。

于 2012-09-14T08:14:20.987 回答
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;
}
于 2012-09-14T08:20:59.403 回答
0

我想你在寻找 atoi() http://www.elook.org/programming/c/atoi.html

于 2012-09-14T08:09:50.237 回答
0

strtolatoi具有更好的错误处理更好。

于 2012-09-14T08:15:26.180 回答
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() 在内部只调用以 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');

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

于 2012-09-14T08:26:51.277 回答