我有一个带有一些非ascii字符的字符串(iso 8859-1),任何想法我如何转换为整数或二进制?
例如
str有这样的文字:“value 5 = \ 377 \ 242 \ 242”
我需要将\ 377 \ 242 \ 242转换为二进制(我尝试使用atol或strtol但不起作用)
由于
答案 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为基础。
否则,请澄清您的要求或问题。给出一个示例程序片段,显示您想要实现的内容(伪代码也可以工作)。