我有一个指针 lpBegin 指向一个字符串“1234”。现在我想将此字符串与 uint 进行比较,如何在不使用 scanf 的情况下将此字符串变为无符号整数?我知道字符串编号是 4 个字符长。
8 回答
您将不得不使用该atoi
功能。这需要一个指向 a 的指针char
并返回一个int
.
const char *str = "1234";
int res = atoi(str); //do something with res
正如其他人和我不知道的那样,atoi
不建议这样做,因为它未定义发生格式错误时会发生什么。strtoul
所以像其他人建议的那样更好地使用。
您可以使用该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/
绝对是 atoi() ,它易于使用。
不要忘记包含 stdlib.h。
您可以使用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;
}
我想你在寻找 atoi() http://www.elook.org/programming/c/atoi.html
strtol比atoi
具有更好的错误处理更好。
您应该使用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... 函数)。
如果您确实确定该字符串是 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()
是非常优越的,所以如果你有可用的库,请使用它。