Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.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++ 将std::字符串缓冲区转换为整数_C++ - Fatal编程技术网

C++ 将std::字符串缓冲区转换为整数

C++ 将std::字符串缓冲区转换为整数,c++,C++,我有一个std::string,其中包含从串行端口接收的四个字节。这些字节以小尾端表示两个int16\t。由于该软件将仅在x86上运行,因此无需更改endianness 我获取单个整数值的第一种方法是: std::string inData = ...; // inData.length() = 4 int16_t measurement[2]; measurement[0] = ( (int16_t)inData[0] << 8 ) | (int16_t)inData[1]; me

我有一个
std::string
,其中包含从串行端口接收的四个字节。这些字节以小尾端表示两个
int16\t
。由于该软件将仅在x86上运行,因此无需更改endianness

我获取单个整数值的第一种方法是:

std::string inData = ...; // inData.length() = 4
int16_t measurement[2];
measurement[0] = ( (int16_t)inData[0] << 8 ) | (int16_t)inData[1];
measurement[1] = ( (int16_t)inData[2] << 8 ) | (int16_t)inData[3];
它按预期工作。然而,这是“正确”的方法吗?或者有没有一种方法可以在不使用
重新解释\u cast
的情况下实现这一点


我看了一下,但是被接受的答案和关于别名的评论让我困惑。

两者都是正确的,后者最好调用
c_str()
并抛出结果指针。前者的问题是std::string很可能基于
有符号字符
。因此,转换为更大的
int
类型将扩展符号位,例如
0x80
将变为
0xff80

如果您使用以下方法修复原始文件:

( (uint8_t)inData[0] << 8 ) | (uint8_t)inData[1];

((uint8_t)inData[0]这两种方法都为我生成相同的结果。请参阅使用
std::basic_string
(inData[0]
( (uint8_t)inData[0] << 8 ) | (uint8_t)inData[1];