在C++中,可以使用文件输入/输出流来进行二进制文件的读写操作,方便数据的保存和读写。
- //C++读取bin二进制文件
- int read_bin()
- {
- std::ifstream file("data_100.bin", std::ios::in | std::ios::binary);
- if (file)
- {
- // 按照二进制格式读取数据
- file.seekg(0, std::ios::end);
- long long fileSize = file.tellg();
- printf("size of firm: %lld\n", fileSize);
-
- // 将读写位置移动到文件开头,申请内存,将固件内容存入buffer
- file.seekg(0, std::ios::beg);
- char* buffer = new char[fileSize];
- file.read(buffer, sizeof(char)*fileSize);
-
- // 打印读取到的数据(以十六进制的形式)
- for (int i = 0; i < fileSize;)
- {
- //if (i % 16 != 0)
- if (i % 8 != 0)
- {
- printf(" ");
- }
- printf("%02X", (unsigned char)buffer[i]);
- //std::cout << std::hex << static_cast
(static_cast(buffer[i])) << " "; - i++;
- //if (i % 16 == 0)
- if (i % 8 == 0)
- {
- printf("\n");
- }
- }
-
-
-
- delete[] buffer;
- file.close();
- }
- else
- {
- std::cout << "Failed to open file." << std::endl;
- }
-
-
- return 0;
- }
- #include
- #include
-
- //二进制补码转十进制
- int bin2dec()
- {
- unsigned char binaryInteger[] = { 1, 0, 1, 1, 1, 1, 0, 1 };
- int s=0, i=0, j=0;
-
- int length = sizeof(binaryInteger) / sizeof(unsigned char);
- for (i = length - 1, j = 0; i >= 0; i--, j++)
- {
- s = s + binaryInteger[i] * pow(2, j);
- }
- printf("无符号十进制整数为%d", s);//189
-
- //有符号的二进制补码转化为十进制
- if (binaryInteger[0] == 1)
- {//符号位为1
- s = 0;
- for (i = length - 1, j = 0; i > 0; i--, j++)
- {
- s += binaryInteger[i] * pow(2, j);
- }
- s = s - binaryInteger[0] * pow(2, length - 1);//符号位计算时取负值
- }
- else
- {
- //符号位为0
- s = 0;
- for (i = length - 1, j = 0; i >= 0; i--, j++)
- {
- s = s + binaryInteger[i] * pow(2, j);
- }
- }
- printf("有符号十进制为%d", s);//-67
-
- return 0;
- }
- #include
- #include
-
- using namespace std;
-
- int f_geshishuchu()
- {
- int a = 15;
- cout << std::oct << a << endl;//八进制
- cout << dec << a << endl;//十进制
- cout << hex << a << endl << endl;//十六进制
-
- //setw()指定域宽
- cout << setw(10) << 3.1415 << endl;//必须包含iomanip头文件 //默认用空格填补
- cout << setw(10) << setfill('a') << 3.1415 << endl << "\n";//setfill括号里的字符只能是一个,否则会报错
-
- //setionsflags确定对齐方式
- cout << setw(10) << setfill('a') << setiosflags(ios::left) << 3.1415 << endl;
- cout << setw(10) << setfill('a') << setiosflags(ios::right) << 3.1415 << endl << "\n";
-
- double b = 35.1415926535798;
- //setprecision指定精度,包含小数点前面的
- cout << setprecision(3) << setiosflags(ios::left) << b << endl;
- //35.1
- return 0;
- }
C语言中的 fread() 函数是一个标准库函数,用于从文件中读取数据。在本文中,我们将详细介绍 fread() 函数的用法、参数和返回值,并提供一些示例代码来帮助读者更好地理解该函数。
fread() 函数的函数原型和语法如下所示:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
- 参数:
- ptr:指向要读取数据的缓冲区;
- size:每个数据项的字节数;
- count:要读取的数据项数目;
- stream:指向文件流的指针。
- 返回值:函数返回一个 size_t 类型的值,表示成功读取的数据项数目。
fread() 函数可以从文件中读取二进制数据。它在读取数据时,会从文件流中读取 count 个数据项,每个数据项占用 size 个字节。它会将这些数据项存储到由 ptr 指向的缓冲区中,并返回成功读取的数据项数目。
下面是一个简单的使用 fread() 函数的示例程序。该程序将从文件中读取整型数据,并将它们打印到控制台上。
- #include
-
- int main()
- {
- FILE *fp;
- int buffer[100];
- int count, i;
-
- fp = fopen("data.bin", "rb");
-
- if(fp == NULL)
- {
- printf("Failed to open file\n");
- return 1;
- }
-
- count = fread(buffer, sizeof(int), 100, fp);
-
- printf("Read %d integers:\n", count);
-
- for(i = 0; i < count; i++)
- {
- printf("%d\n", buffer[i]);
- }
-
- fclose(fp);
-
- return 0;
- }
在上面的示例程序中,首先打开一个名为“data.bin”的文件,以二进制读取方式打开。如果文件打开失败,则会打印一条错误消息并返回 1。接下来,程序将从文件中读取 100 个整型数据,并将它们存储在 buffer 数组中。读取完数据后,程序打印出读取的数据项数目,并将每个整数打印到控制台上。最后,程序关闭文件并返回 0。
在使用 fread() 函数时,需要注意以下几点:
本文介绍了 C语言中的 fread() 函数的用法、参数和返回值。该函数可以从文件中读取二进制数据,并将数据存储到指定的缓冲区中。在使用该函数时,需要注意缓冲区的大小、数据类型的字节对齐、文件是否已经打开等细节问题。本文提供了一个简单的示例程序,帮助读者更好地理解 fread() 函数的用法。