繁体   English   中英

Char类型(32位和64位)

[英]Char type on 32 bit vs 64 bit

这是以下问题:

如果我在32位计算机上进行开发,并且希望将我的代码移植到64位计算机上,那么这就是senario。

我的函数内部使用了很多std字符串。 现在,如果我想提供API,我可以要求他们发送char * ,然后在内部使用吗? 还是要求他们给我发送__int64并将其转换为字符串?

在我的API中使用char *另一个原因是,至少在unix的一种实现类型(工具的不同版本)中,它通过argvstdin拾取数据,而argvchar *

在Windows版本中,我不确定该怎么办。 我可以要求__int64 ,然后将其转换为字符串...并使其以这种方式工作,或者也可以使用char *

如果要提供C ++实现,则您的公共接口应该只使用std::string

但是,如果出于兼容性的原因(听起来可能是您所需要的)需要提供C风格的接口,那么使用char*正是这样做的方法。 在您的32位库中,它将是32位指针,在库的64位版本中,它将是64位。 然后,这将符合客户用户对API的期望。 但是,您应该尽早在库中绝对将其转换为std::string

您最好尽早转换为字符串,这是C ++的推荐/标准,它将有助于消除所有char *问题。

您可以遵循几种方案来编写可移植的代码,请参阅以下问题:
您曾经提出过的最有趣的用户请求是什么?
如何在没有编译器警告的情况下进行可移植的64位算术运算

您将在实现不同体系结构之间的二进制可移植性时遇到问题,C ++提供了源代码级可移植性。

在32位和64位系统上, char始终为一个字节。 但是,使用std库并不是最糟糕的选择。 ;) std应该处理不同的平台,因为它对于“最”部分是独立于平台的。

如果您无法在体系结构中表示数字,则向char*转换/从char*转换实际上并没有帮助。

如果要将64位整数从其十进制(或十六进制)文本表示形式转换为值,则仍需要64位存储它。

您似乎有些困惑。 如果您正在编写的代码仅在目标计算机中使用,则重新编译将解决大多数问题。 只是不依赖于特定的内存布局就可以了。 使用字符串(与wstrings相对)可能意味着字符编码为UTF-8(如果不是,请重新考虑),因此在平台之间使用有限形式的数据展示(例如文件)也是可以的。

在这种情况下,您的接口决定是在(const) std::string(&)(const) char*, integer_type (请不要依赖空终止符)。 决定因素是您是否预期需要支持其他编译器或编程语言。

现在,如果您打算使该接口可从其他计算机调用(即网络接口),则您的工作将会更加艰巨。 在这种情况下,请明确指定所有内容的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM