如何将c#代码转换为c++
本文关键字:转换 c++ 代码 | 更新日期: 2023-09-27 17:55:01
我正在尝试从二进制读取器获得双精度浮点格式的双精度值。
我在c++中使用std::ifstream .
我这里有c#代码。
但是我不知道BitConverter是做什么的。
所以,谁来帮我把代码转换成c++或C代码。
byte[] bytes = ReadBytes(8); -> ReadBytes is from BinaryReader class.
byte[] reverse = new byte[8];
//Grab the bytes in reverse order
for(int i = 7, j = 0 ; i >= 0 ; i--, j++)
{
reverse[j] = bytes[i];
}
double value = BitConverter.ToDouble(reverse, 0);
编辑
根据BLUEPIXY,我可以为此创建c++代码。
char bytes[8];
file.read(bytes, 8);
char reverse[8];
for (int i = 7, j = 0; i >= 0; i--, j++)
{
reverse[j] = bytes[i];
}
double value = *(double*)reverse;
感谢BLUEPIXY。
代码的作用类似于本示例的read部分;
#include <fstream>
#include <iostream>
int main() {
// Write the binary representation of a double to file.
double a = 47.11;
std::ofstream stream("olle.bin");
stream.write((const char*)&a, sizeof(a));
stream.close();
// Read the contents of the file into a new double.
double b;
std::ifstream readstream("olle.bin");
readstream.read((char*)&b, sizeof(b));
readstream.close();
std::cout << b << std::endl; // Prints 47.11
}
换句话说,它只是将流中的原始字节读入double类型。遗憾的是,C
中的双精度不能以任何方式保证是固定大小,因此您不能保证拥有可以使用的8字节大小的浮点数据类型。
#include <stdio.h>
#include <stdlib.h>
typedef unsigned char byte;
byte *ReadBytes(const char *filename, size_t size){
FILE *fp = fopen(filename, "rb");
byte *buff = malloc(size);
byte *p = buff;
while(size--)
*p++ = fgetc(fp);
fclose(fp);
return buff;
}
int main(){
byte *bytes = ReadBytes("data.txt", 8);
byte *reverse = malloc(8);
for(int i=7, j=0; i >= 0; --i, ++j)
reverse[j] = bytes[i];
double value = *(double*)reverse;
printf("%f'n", value);
free(bytes);free(reverse);
return 0;
}