[英]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.