- Tìm số 0 đầu tiên trong một mảng bit
- Unix Hiển thị thông tin về các tập tin khớp với một trong hai mẫu
- Biểu thức chính quy thay thế nhiều tệp
- Ẩn lệnh từ xtrace
我试图从正在解析的命令行中找出哪个函数最适合将十进制、十六进制或八进制数转换为 số nguyên
最好——在不知道输入的情况下事先。
目标是使用一个函数来识别不同类型的输入并将其分配给它的整数 (số nguyên
) 值,然后可以这样使用:
./a.out 23 0xC4 070
可以打印
hai mươi ba
196 /*hexadecimal*/
56 /*octal*/
我能看到的唯一问题是解析以找出十进制整数和八进制整数之间的差异。
题外话,这个把字符串转成整数使用稳定吗?
1 Câu trả lời
which function would be best to convert either a decimal, hexadecimal, or octal number to an
số nguyên
the best (?)
要将此类文本转换为 số nguyên
,建议使用 long strtol(const char *nptr, char **endptr, int base);
转换为 时进行额外测试>int
,如果需要的话。
sử dụng 0
BẰNG base
评估转向转换中的早期字符作为 base 10、16 或 8。
@Mike Holt
Convert text per:
Step 1: Optional whitespaces like `' '`, tab, `'\n'`, ... .
Step 2: Optional sign: `'-'` or `'+'`.
Step 3:
0x or 0X followed by hex digits--> hexadecimal
0 --> octal
else --> decimal
示例代码
#include
#include
#include
int mystrtoi(const char *str) {
char *endptr;
errno = 0;
// v--- determine conversion base
long long_var = strtol(str, &endptr, 0);
// out of range , extra junk at end, no conversion at all
if (errno == ERANGE || *endptr != '\0' || str == endptr) {
Handle_Error();
}
// Needed when `int` and `long` have different ranges
#if LONG_MIN < INT_MIN || LONG_MAX > INT_MAX
if (long_var < INT_MIN || long_var > INT_MAX) {
errno = ERANGE;
Handle_Error();
}
#kết thúc nếu
return (int) long_var;
}
atoi vs atol vs strtol vs strtoul vs sscanf ... to int
atoi()
亲:很简单。
专业版:转换为 số nguyên
.
Pro: 在 C 标准库中。
优点:快。
缺点:超出范围的错误,未定义的行为. @chqrlie
缺点:既不处理十六进制也不处理八进制。
atol()
优点:简单。
Pro: 在 C 标准库中。
优点:快。
缺点:转换为 dài
,而不是大小可能不同的 số nguyên
.
缺点:超出范围的错误,未定义的行为.
缺点:既不处理十六进制也不处理八进制。
strtol()
优点:简单。
Pro: 在 C 标准库中。
优点:良好的错误处理。
优点:快。
优点:可以处理二进制文件。 (基数 2 到基数 36)
缺点:转换为 dài
,而不是大小可能不同的 số nguyên
.
strtoul()
优点:简单。
Pro: 在 C 标准库中。
优点:良好的错误处理。
优点:快。
优点:可以处理二进制文件。
---:不提示负数。
缺点:转换为 unsigned long
,而不是大小可能不同的 số nguyên
.
sscanf(..., "%i", ...)
Pro: 在 C 标准库中。
专业版:转换为 số nguyên
.
---:中间道路的复杂性。
缺点:可能很慢。
缺点:OK 错误处理(未定义溢出)。
locale
设置会影响/受益。 §7.22.1.4 6 “在“C”语言环境以外的其他语言环境中,可以接受其他特定于语言环境的主题序列形式。”
额外学分:
@Jonathan Leffler : errno
Bài kiểm tra ERANGE
,atoi()
十进制,关于 errno
多线程问题的讨论。< br/> @Marian速度问题。
@Kevin 库的包容性。
要转换ngắn
,signed char
等,考虑strto_subrange()
.
关于c - atoi vs atol vs strtol vs strtoul vs sscanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865622/
本文关键词:字符串转整数,atoi,题解,Leetcode, 力扣,Python, C++, Java 题目地址:https://leetcode-cn.com/problems/string-to
我正在读取通过 RS485 发送的值,这是编码器的值我首先检查它是否已返回 E 字符(编码器报告错误),如果没有则执行以下操作 *position = atoi( buffer );
我有一个问题,我的 C 程序只为小于 5 的值正确分配了输入数据。我发现在创建保存值的 int 数组时出错:我使用了 atoi(var-1) 而不是 atoi(变种)-1。 当var='5'时,打印出
我试图在字符串 509951644 和 4099516441 上调用 atoi。第一个毫无问题地转换了。第二个是给我十进制值 2,147,483,647 (0x7FFFFFFF)。为什么会这样? 最佳
我编写了一个程序,它从用户那里获取 2 个参数并将它们加在一起,例如,如果用户输入 ./test 12 4,它将打印出总和:16。 令我困惑的是为什么我必须使用 atoi我不能只使用 argv[1]
你好,我有一个函数叫 int SearchKey(char key[]). 我给出的关键是这样的字符串 2014-02-13T23:50:00 在函数中我只保留数字,这意味着我的字符串变成这样:201
我正在制作用于组装的 atoi 函数。 无论我尝试什么都行不通,我也不知道为什么。 有谁知道是什么问题? org 100h mov si, stri ;parameter call atoi
我正在尝试解决家庭作业问题。说明是用 C 语言编写 Vigenere 密码。 C 不喜欢下面的代码: rot = atoi(argv[1][index]) - 'A'; rot 已声明为整数; ind
我试图编写自己的 atoi() 函数实现,并尝试了两种不同的代码: #include #include int myatoi(const char *string); int main(int a
我希望在不使用任何其他函数(如 strtonum())的情况下重现 atoi() 函数的行为。我真的不明白如何将 char 或 char * 转换为 int 而不是将其转换为 ASCII 值。我在 C
我有以下代码: char* input = (char*)malloc(sizeof(char) * BUFFER) // buffer is defined to 100 int digit = a
我想在编译时实现atoi()函数(在C++语言中,使用C++11或C++14标准)。因此它应该能够将双引号中的文本解析为数字,或者报告错误。更具体地说,它是更大系统的一部分,能够在编译时解析类似 pr
以下代码显示了奇怪的行为: int main() { char numArr[] = {'9','8','5'}; int num; printf("%d\n",num);
这是代码: #include /* atoi: convert s to integer; version 2 */ int atoi(char s[]) { int i, n, sign; fo
我在这个简单的循环练习中遇到问题。我认为代码是正确的,并且没有收到任何错误,但是当我运行程序时,我只是一遍又一遍地收到“^C”。请帮忙。 #import #import #include int
我对 atoi() 有一个奇怪的问题:我有一个字符串(比如说 str),类似于“aaaa 1111\0”(我打印并检查过 - 确实是这样)。我尝试在 str+5 上执行 atoi,但程序崩溃了。我在前
Đã đóng. Sự cố này cần có thông tin chi tiết để gỡ lỗi. Hiện tại không chấp nhận câu trả lời. Chỉnh sửa câu hỏi để bao gồm hành vi mong muốn, một vấn đề hoặc lỗi cụ thể và
如何在不使用给定参数中的 atoi 的情况下将字符串转换为整数?这是我尝试过的: int main(int argc, char *argv[]){ for(int i = 1; i < ar
我使用 atoi() 从 header 获取状态代码,但它不适用于以下输入: "404 Not Found\r\n内容类型: text/html\r\n日期: 2013 年 12 月 12 日星期四
printf("Enter a number or type 'Exit' to exit\n"); long val = 0; int y = 3; scanf("%s",
Tôi là một lập trình viên xuất sắc, rất giỏi!