我试图从包含 float 的字符数组中获取第一个元素值。 字符数组大小为 7,它包含两个浮点元素,因此大小可以假定为 8。我只想获取第一个元素,忽略第二个值的任何内容。 这是我的代码-
int main()
{
char cArr[7] = {2.0085,4.52};
char* charPtr = nullptr;
charPtr=cArr;
cout<<"char[0] :"<<*charPtr<<endl;
float* fPtr =(float*)charPtr;
cout<<"char[0] :"<<*fPtr<<endl;
cout<<endl;
}
这是我的输出:
g++ b.cpp -o b.exe -std=c++0x
b.cpp: In function 'int main()':
b.cpp:6:29: warning: narrowing conversion of '2.0085000000000002e+0' from 'double' to 'char' inside { } [-Wnarrowing]
char cArr[7] = {2.0085,4.52};
^
b.cpp:6:29: warning: narrowing conversion of '4.5199999999999996e+0' from 'double' to 'char' inside { } [-Wnarrowing]
./b.exe
char[0] :
char[0] :1.43773e-42
我期待:
char[0] :2.0085
对代码更改有什么建议吗?
最佳答案
看起来你正在尝试让你的数组保存这个:
float fArr[2] = { 2.0085, 4.52 };
char cArr[7];
memcpy(cArr, fArr, 7);
您提供的代码不允许您访问 float 表示的字节。 memcpy
将会。
但是,仍然不允许通过指针转换从 char 数组中读取 float
。这违反了严格的别名,并导致未定义的行为。要从数组中读取四个字节并将它们视为 float 的表示形式,您需要第二次调用 memcpy
。
关于c++ - 如何从包含浮点值的字符数组中获取第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49377357/