如何将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。

如何将c#代码转换为c++

代码的作用类似于本示例的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;
}