繁体   English   中英

非ASCII字符到C ++中的二进制或整数

[英]non ascii char to binary or integer in c++

我有一些非ascii字符的字符串(iso 8859-1),我知道如何将其转换为整数或二进制吗?

str包含以下文本:“值5 = \\ 377 \\ 242 \\ 242”

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

谢谢

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

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

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

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

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

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

在这里查看有关C字符文字的详细信息。

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部分中进行描述。

我对您的要求感到困惑。

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

八进制值377、242和242表示3个8位量化或总共24位。 该位数不是2的幂,所以我想您不会将所有位数转换为二进制。 (尽管通常使用24位来描述颜色值)。

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

否则,请阐明您的要求或问题。 给出一个示例程序片段,其中显示了您想要实现的目标(伪代码也可以使用)。

暂无
暂无

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

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