C++ 如何从包含浮点值的字符数组中获取第一个元素?
我试图从包含float的字符数组中获取第一个元素值。 字符数组的大小为7,它包含两个浮点元素,因此可以假定大小为8。我只想得到第一个元素,忽略关于第二个值的任何内容。 这是我的密码-C++ 如何从包含浮点值的字符数组中获取第一个元素?,c++,arrays,linux,pointers,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 =(flo
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;
}
我期待着:
字符[0]:2.0085
对代码更改有什么建议吗
对代码更改有什么建议吗
你真的想要这个:
float cArr[2] = { 2.0085, 4.52 };
float *fPtr = cArr;
看起来您正试图让阵列容纳以下内容:
float fArr[2] = { 2.0085, 4.52 };
char cArr[7];
memcpy(cArr, fArr, 7);
您提供的代码不允许您访问浮点表示的字节。我会的
但是,仍然不允许通过指针转换从char数组中读取浮点值。这违反了严格的别名,并导致未定义的行为。要从数组中读取四个字节并将其视为浮点数的表示形式,您需要再次调用memcpy。如果我理解您的问题是正确的,您有一个文本字符串,其中包含逗号分隔的小数点值。比如:2.0085,4.52 现在,您需要提取第一个小数点值,即2.0085,并将其转换为浮点值,即类似于浮点f=2.0085 您的代码有两个主要问题: 1文本字符串初始化错误,字符数组太短 2您不能通过强制转换指针来进行转换。您需要调用进行转换的特殊函数,例如atof 一种方法是:
#include <iostream>
#include <cstring>
int main()
{
// Initialize text string with comma seperated decimal point values
char cArr[32] = "2.0085,4.52";
// Extract the first decimal point text string
char* p = std::strtok(cArr, ",");
std::cout << "First text string: " << p << std::endl;
// Convert the text representation to a float representation
float f = std::atof(p);
std::cout << "First float value: " << f << std::endl;
return 0;
}
你知道一个浮点数和一个字符有不同的二进制表示法吗?通过解释你的意思来改进这个问题:char cArr[7]={2.0085,4.52};事实并非如此。@DavidC.Rankin:不,这根本不像你的评论所说的那样。C++不只是在不要求的情况下将源代码转换成字符串。实际结果将是{char2.0085,char4.52,0,0,0,0,0},即{2,4,0,0,0,0}@A.Gupta:不,它不存储两个浮点元素。它存储7个字符元素。前两个元素通过浮点初始值设定项的有损转换进行初始化,每个元素都转换为一个字符。剩下的五个元素归零。@DavidC.Rankin:char2.0085是一个字符。char4.52也是一个char。然后,数组中的初始值设定项比元素少五个,因此索引2-6变为char0。这些不是字符文字,字符文字被单引号包围“它不是一个浮点数组,而是一个浮点元素的字符数组。@a.Gupta:您描述的行为是浮点数组的行为。是的,我想从数组cArr读取前4个字节,它本身是一个7字节。您是否可以在不修改这三行的情况下提供代码-char cArr[7]={2.0085,4.52};char*charPtr=nullptr;charPtr=cArr@A.Gupta您不能以您尝试的方式在char元素中存储浮点值。你必须改变你填充卡尔的方式。
First text string: 2.0085
First float value: 2.0085