我有一个指针lpBegin指向一个字符串“1234”。现在我希望这个字符串与一个uint比较如何在不使用scanf的情况下将此字符串设为无符号整数?我知道字符串数字是4个字符长。
答案 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)
我觉得你找atoi() http://www.elook.org/programming/c/atoi.html
答案 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()
非常优越,所以如果您有可用的库,请使用它。