You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中写入纯整数(非字符串形式)至文件以适配C语言使用?

解决方案:在Python中写入二进制整数文件(兼容C语言)

要生成可被Python和C直接读取的二进制整数文件,核心是用struct模块将整数打包为二进制字节流,而非字符串形式。以下是具体修正方案:

关键知识点

  • 用struct.pack()将Python整数转换为对应C语言类型的二进制字节
  • 用struct.unpack()或struct.iter_unpack()将二进制字节还原为Python整数
  • 格式符要匹配:比如'Q'对应C的unsigned long long(64位无符号整数),'q'对应signed long long,'I'对应unsigned int(32位)

修正后的完整代码

import os
import random
import struct

file_root = "[你的文件路径]"
file_name = file_root + "Random_int64"

# 写入二进制整数文件
with open(file_name, "wb") as f:
    for _ in range(10000):
        val = random.randint(0, 10000)
        # 打包为64位无符号整数(对应C的unsigned long long)
        packed_data = struct.pack('Q', val)
        f.write(packed_data)

# 读取并解析二进制文件
with open(file_name, "rb") as f:
    whole_file = f.read()
    # 解析10000个64位无符号整数
    integers = struct.unpack('10000Q', whole_file)
    # 或者用iter_unpack逐个解析(适合大文件)
    # integers = [num for num, in struct.iter_unpack('Q', whole_file)]

print(integers[:5])  # 打印前5个验证

代码修正说明

  1. 文件打开逻辑:用with语句自动管理文件关闭,wb模式会创建新文件或清空现有文件,无需单独判断文件是否存在
  2. 打包整数:struct.pack('Q', val)将整数转换为8字节的二进制数据(64位),直接写入文件,C语言可以用fread直接读取到unsigned long long数组中
  3. 解析整数:struct.unpack的参数顺序是格式字符串在前,二进制数据在后,'10000Q'表示解析10000个64位无符号整数
  4. 常用格式符对应表:
    • 'B': 无符号char(1字节)
    • 'I': 无符号int(4字节)
    • 'Q': 无符号long long(8字节)
    • 'i': 有符号int(4字节)
    • 'q': 有符号long long(8字节)

C语言读取示例

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fp = fopen("Random_int64", "rb");
    if (!fp) {
        perror("Failed to open file");
        return 1;
    }

    unsigned long long nums[10000];
    // 直接读取10000个64位无符号整数
    size_t count = fread(nums, sizeof(unsigned long long), 10000, fp);
    printf("Read %zu numbers\n", count);
    printf("First number: %llu\n", nums[0]);

    fclose(fp);
    return 0;
}

内容的提问来源于stack exchange,提问作者RTC222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:11:21