非ascii char为二进制或c ++中的整数

时间:2010-03-01 16:13:29

标签: c++

我有一个带有一些非ascii字符的字符串(iso 8859-1),任何想法我如何转换为整数或二进制?

例如

str有这样的文字:“value 5 = \ 377 \ 242 \ 242”

我需要将\ 377 \ 242 \ 242转换为二进制(我尝试使用atol或strtol但不起作用)

由于

3 个答案:

答案 0 :(得分:4)

字符已经是数字/二进制 - 在C中,字符是整数类型。

你可能会感到困惑的是,字符串文字"\377\242\242"有3个字符,而不是12个字母。在C中,0到7之间的一个\后跟1-3位是一个八进制转义序列。

如果您为字符串"\377\242\242"编制索引,则会得到以下结果(伪代码):

"\377\242\242"[0] == 255 == '\377';

"\377\242\242"[1] == 162 == '\242';

"\377\242\242"[2] == 162 == '\242';

有关C字符文字的详细信息,请查看here

答案 1 :(得分:0)

ascii和二元混合的事实意味着它是非标准的 所以你必须按惯例来玩:如果约定说在“value 5 =”字符串后面有一个小端4字节整数,你可以在那里放一个指针并转换成一个整数,如果你处理一点 - 结束系统。

在你的情况下(3个字节)

int threeBytesToInt(char* p)
{
  return ((unsigned int)p[0]) * (255L * 255L) + ((unsigned int)p[1]) * 255L + ((unsigned int)p[2]);
}

可以通过正确的约定来做到这一点

如果可能,请避免使用这些构造或采用“干净”约定来最小化可移植性问题。 在一个干净的约定中,二进制数据的格式将在ascii部分中描述。

答案 2 :(得分:0)

我对你的要求感到困惑。

根据ISO 8859表,八进制值377和242不代表数字字符,例如'0'到'9'。因此,使用strtoul无法将3个字符转换为一个整数。

八进制值377,242和242表示3个8位量子或总共24位。这个位数不是2的幂,所以我猜你不是所有的位都转换成二进制。 (虽然24位常用于描述颜色值)。

您是否希望值显示为二进制文本数字,例如八进制377的“11111111”?如果是这种情况,请使用std::strtoul,以2为基础。

否则,请澄清您的要求或问题。给出一个示例程序片段,显示您想要实现的内容(伪代码也可以工作)。