问题标签 [strtoull]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
232 浏览

c - C: 将字符串转换为 unsigned long long 错误

我只是想在一个变量中转换一个String(从文件中的一行读取) 。long long我的问题是我得到分段错误,我不知道为什么......这是代码:(我在“3° Call”函数上对错误发表了评论)

这是我要阅读的文件,它是一个简单的.txt文件:

0 投票
1 回答
597 浏览

c - strtoull("-1", NULL, 0) 和其他负值的令人惊讶的行为

strtoull("-1", NULL, 0)在我测试的系统(OS/X 与 Apple Libc,Linux 与 Glibc)上评估为18446744073709551615, (0xFFFFFFFFFFFFFFFF又名ULLONG_MAX)。

既然strtoull应该检查返回类型范围之外的值,为什么它不返回0所有负值?

编辑:周围的行为-ULLONG_MAX似乎也不一致:

0 投票
1 回答
94 浏览

c++ - strtoull() 的输出在转换为双精度然后返回到 uint64_t 时会丢失精度

考虑以下:

哪个打印:

第一个数字只是ULLONG_MAX从字符串转换为 a的结果uint64_t,它按预期工作。

但是,如果我将结果转换为double,然后再转换为uint64_t,那么它会打印0第二个数字 。

通常,我会将其归因于浮点数的精度不准确,但更让我感到困惑的是,如果我将ULLONG_MAXfromuint64_t转换为double然后返回 to uint64_t,结果是正确的(第三个数字)。

为什么第二个和第三个结果之间存在差异?

编辑(@Radoslaw Cybulski)对于另一个在这里发生的事情,试试这个代码:

愉快地打印:

0 投票
3 回答
613 浏览

c++ - 如何解析包含整数的字符串并检查是否大于C++中的最大值

我想确定(在 C++ 中)一个字符串是否包含一个在 0 - UINT_MAX 范围内的数字我已经尝试过 atoi 等,但不处理这种情况。例如字符串 42949672963 将无法通过测试有没有人有任何建议?

0 投票
2 回答
87 浏览

c++ - walk, strol 函数没有为 long_min 提供正确的输出

对于以下代码

输出是

为什么l1不是long_min,为什么是l2?我读过该字符串可以在 ato*,strto* 函数的开头包含+/-符号。-但是二进制中的负数在计算机使用的 2 的补码中没有任何符号。我很困惑。

0 投票
1 回答
85 浏览

c - 为什么使用左移位运算符后前两位数字丢失?

我将十六进制值存储在 uint64_t 变量中。当我调用strtoull()将字符串转换为十六进制值时,我得到了正确的结果,但是当我左移 ( <<) 32 时,我丢失了前两位数。

我正在测试的字符串是"398a59b412". 我希望能回来398a59b41200000000,但我得到的不是这个8a59b41200000000

0 投票
1 回答
130 浏览

c - strtoull() 在 C89 中的可用性

我从这里开始阅读 strtoul()/strtoull() 的文档,在“符合条件”部分的底部,它说明了这两点:

strtoul():POSIX.1-2001、POSIX.1-2008、C89、C99 SVr4。
strtoull():POSIX.1-2001、POSIX.1-2008、C99。

除了整个文档中的其他参考资料外,这两行向我表明,在使用 c89/c90 标准编译程序时,函数 strtoull 不应该可用。但是,当我使用 gcc 运行快速测试时,它允许我调用此函数,而不管我指定的标准是什么。

首先,我用来测试的代码:

这是我的编译命令:

现在,公平地说,它确实警告我兼容性问题:

鉴于文档,这些警告消息正是我所期望的。它通知我找不到我指定的功能,甚至 C90 标准不支持unsigned long long. 但是,当我尝试运行此代码时,它运行良好,没有崩溃或其他类型的错误。它根据需要打印 value 1234。所以,基于这个实验,我有几个问题我希望有人比我更有经验。

  1. 这是我没有提供必要的编译标志来执行“严格”c98 标准的问题吗?
  2. 这是我误解文档的情况,还是我应该参考 gcc 本身的一些文档?如果是这样,我在哪里可以找到它?
  3. 我不理解的编译/链接过程是否有一些基本的东西,这解释了这个问题?
  4. 为什么我会被警告不兼容,甚至警告我正在调用的函数不存在,但代码仍然可以正常工作?
  5. 这个实验是否意味着这些-std=c89 -pedantic标志实际上并没有强制执行 C89/C90 标准?

最后一点,我并不是想说我想在 C89 中使用这个功能,我只是对兼容性限制感到好奇,然后对答案感到困惑。

提前感谢您的任何回复!

0 投票
1 回答
154 浏览

c - strtoull 是否总是返回有效数字或设置 errno?

strtoull保证返回一个有效的数字,或者设置errno(如果没有有效的数字可以被解析)?

换句话说,这是

正确,还是还需要进行其他检查?