【发布时间】:2013-12-06 00:48:07
【问题描述】:
如果您不知道运行代码的机器的默认设置,是否有一种简单的方法可以在 char 和 unsigned char 之间进行转换?
(在大多数架构上,char 默认是有符号的,因此范围从 -128 到 +127。在其他一些架构上,例如 ARM,char 默认是无符号的,范围从 0 到 255 )
我正在寻找一种方法来选择正确的符号或透明地在两者之间进行转换,最好是不涉及太多步骤的方法,因为我需要对数组中的所有元素执行此操作。
使用预处理器定义将允许在我的代码开头进行设置。
就像指定 char 的显式形式一样,例如 signed char 或 unsigned char,因为只有 char 在平台之间是可变的。
原因是,我想使用一些库函数(例如 strtol),它们接受 char as an argument 但不接受 unsigned char。
我正在寻找一些建议或一些正确方向的指示,以了解什么是一种实用有效的方法来使代码可移植,因为我打算在几台具有不同默认设置的机器上运行代码对于char。
【问题讨论】:
-
请为每个问题发布一个问题,我认为以目前的形式无法回答这个问题。
-
欢迎来到 StackOverflow!请注意,关于 StackOverflow 的问题必须由具体参考而非意见来回答 - 因此,应避免“我应该做 X”或“什么是 Y 的好资源”的问题。另请注意,一个问题应涵盖一个具体问题。
-
c++中
char有3种类型(char、unsigned char和signed char),所以这实际上是一个很好的可移植性问题。 @reila-lee 开始与我聊天,我将发布一个答案,尽我所能涵盖您的所有问题:) -
sourceforge.net/p/predef/wiki/Architectures 处有一个预定义宏列表,这可能会有所帮助,这样您就可以检测它在哪个架构上运行,并由此确定
char的默认设置。 -
在二进制补码机上,它只是一个解释问题。因此,对于 7 位字符集,完全没有区别。
标签: c++ char portability unsigned-char