环礁和(长整型)的区别?

Difference between atoll and (long int)?

本文关键字:区别 长整型      更新时间:2023-10-16

如果这是一个糟糕的问题,请原谅我。很可能是。但我的印象是(long int)[some string]应该将字符串转换为长整型。情况似乎并非如此,因为我刚刚编写了一个示例程序。

#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char **argv)
{
int firstNum = atoll(argv[1]);
int secondNum = atoll(argv[2]);
int sum = firstNum + secondNum;
long int firstArg = (long int)argv[1];
long int secondArg = (long int)argv[2];
long int argSum = firstArg + secondArg;
cout << "The argSum is: " << argSum << ", which is same as sum: " << sum << endl;
}

我之所以有这种印象,是因为我正在阅读的代码。解释会帮助我建立一些知识。谢谢。

srv.request.a = atoll(argv[1]);
srv.request.b = atoll(argv[2]);
if (client.call(srv))
{
ROS_INFO("Sum: %ld", (long int)srv.response.sum);
}

atoll是一个函数,它解析字符串以产生它表示为long long的数值(然后将其填充到int中)。

强制转换(long int)arg[0]正在执行的操作,它告诉编译器将一个值解释为另一种类型。 在您的情况下,您尝试解释的内容是指向字符的指针,而不是由它指向其开头的字符串表示的值。

但我

的印象是(long int)[some string]应该将字符串转换为long int。

这是不正确的。

它的作用是获取表示字符串的指针值并将其转换为long int。没有人知道从程序的一次运行到下一次运行的价值是多少。

另一方面,使用atoll(argv[1])从字符串中正确提取数字。

我的印象是(long int)[some string]应该将字符串转换为long int。

你误会了。显式转换(也称为强制转换)不执行任何此类操作。将"指向char的指针"(这是字符串的类型)转换为整数将导致指针指向的地址的整数值 - 如果目标整数类型无法表示内存地址值,则可能会失去精度。

环礁和(长整型)的区别?

atoll根据字符串内容表示的数字将字符串转换为整数值。

显式转换根据参数的类型具有不同的行为,但在字符指针的情况下,请参阅上面的段落。

(long int)[some string]是一个强制转换,它不对数据进行实际处理,它只是告诉编译器解释任何数据[一些字符串]就好像它是一个长整数一样,在这种情况下,您将看到字符串在内存中的偏移量,因为C字符串只是指向某些数据的指针。

环礁是一个解析字符串并将文本转换为整数值的函数。