【发布时间】:2014-02-24 19:43:17
【问题描述】:
我有一个包含整数的字符串(已从文件中读取)。
我正在尝试使用strconv.ParseInt() 将string 转换为int。 ParseInt 要求我提供位大小(位大小 0、8、16、32 和 64 对应于 int、int8、int16、int32 和 int64)。
从文件中读取的整数很小(即它应该适合正常的 int)。但是,如果我传递 0 的位大小,我会得到 int64 类型的结果(可能是因为我在 64 位操作系统上运行)。
为什么会这样?我怎样才能得到一个正常的int? (如果有人对我何时以及为什么应该使用不同的 int 类型有一个快速入门,那就太棒了!)
编辑:我可以使用int([i64_var]) 将 int64 转换为普通 int。但我仍然不明白为什么ParseInt() 在我请求位大小为 0 时给了我一个 int64。
【问题讨论】:
-
为了简洁起见使用Atoi?另外,您的 ParseInt 函数是否返回错误?
-
好的,现在我有点困惑。如果我使用 Atoi(),它会给我一个 int,并且一切正常。我打电话给
parseInt(s, 0, 0),它应该推断出base10(因为字符串没有基本前缀)。但是,Atoi 是调用parseInt的简写,基数为 10。为什么 base 参数会影响返回的类型? -
base 参数决定了如何读取输入字符串。字符串可能看起来像“123”或“0xBEEFCAKE”或“1011101”或“0677”。所有这些都有不同的含义并产生不同的数值。
0的基值意味着代码试图自己解决这个问题。但有时这是不可能的。11(十进制)与11(二进制)代表完全不同的值。 -
好吧,我想我真正困惑的是文档。 Atoi 的文档只说它只是“
parseInt(s, 10, 0)的简写”。但是为什么 Atoi 返回int而parseInt返回 int64? -
不知道具体原因,我假设添加
Atoi只是为了适应更熟悉 C API 的人:int atoi ( const char * str );
标签: go