Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+;中的非ascii字符转换为二进制或整数+;_C++ - Fatal编程技术网

C++ c+;中的非ascii字符转换为二进制或整数+;

C++ c+;中的非ascii字符转换为二进制或整数+;,c++,C++,我有一个字符串(ISO8859-1)和一些非ascii字符,知道我如何转换成整数或二进制吗 范例 str有以下文本:“值5=\377\242\242” 我需要将\377\242\242转换为二进制(我尝试使用atol或strtol,但不起作用) 谢谢字符已经是数字/二进制-在C中,字符是整数类型 可能让您感到困惑的是字符串literal“\377\242\242”有3个字符,而不是12个。在C语言中,a\后跟0-7之间的1-3位数字是八进制转义序列 如果将介绍索引到字符串“\377\242\24

我有一个字符串(ISO8859-1)和一些非ascii字符,知道我如何转换成整数或二进制吗

范例

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

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


谢谢

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

可能让您感到困惑的是字符串literal
“\377\242\242”
有3个字符,而不是12个。在C语言中,a\后跟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字符文本的详细信息。

ascii和二进制混合的事实意味着它是非标准的。
因此,您必须遵守约定:如果约定说在“value 5=”字符串之后有一个小的endian 4字节整数,那么如果您使用小endian系统,您可以在那里放置一个指针并强制转换为整数

在您的情况下(3字节)

如果有合适的惯例,我们可以做到这一点

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

我对您的要求感到困惑

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

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

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


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

如何存储此字符串?const char*myString=text->getText().c_str();用谷歌快速搜索,我找不到ISO8959。这是ISO8859的打字错误吗?如果是这样,字符表就在这里:Martin york:是8859不清楚您是否有一个包含“\377\242\242”(即三个字符加一个数字终止符)的字符串文字,还是从程序外部输入的一个包含所有12个可见字符(加上数字终止符)的字符串。
int threeBytesToInt(char* p)
{
  return ((unsigned int)p[0]) * (255L * 255L) + ((unsigned int)p[1]) * 255L + ((unsigned int)p[2]);
}