c++ - 如何从包含浮点值的字符数组中获取第一个元素?

标签 c++ arrays linux pointers

我试图从包含 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/

相关文章:

c++ - 如何继承方法 operator=、clone 和 dispose

c++ - 给定数字位于哪个段?

arrays - 在 MATLAB 中一次为元胞数组分配不同的值

linux - 比较输入和输出 - bash

c# - 我们如何在 C# 中获取 argv[0]?

c++ - 转发成员函数到静态方法

c++ - 以编程方式检查应用程序正在使用的核心数

java - 添加数组时准备语句错误

javascript - 如何公开 json 数据中的图像

linux - 递归比较两个目录,使用shell脚本将目录内容复制到第三个目录