开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 179|回复: 7
收起左侧

[已解决] 易语言代码转c++

 关闭 [复制链接]
结帖率:82% (18/22)
发表于 昨天 12:56 | 显示全部楼层 |阅读模式   河北省廊坊市
11精币
求将这段代码转成c++代码,万分感谢
  
变量名类 型静态数组备 注
股票代码文本型 
股票名称文本型 
写出路径文本型 
集文件字节集 
数据位置整数型 
数据个数整数型 
第一数据双精度小数型 
第二数据双精度小数型 
文件长度整数型 
临时字节集字节集 
股票代码 = “”
股票名称 = “”
第一数据 = 0
第二数据 = 0
写出路径 = “d:\aa\”
集文件 = 读入文件 (写出路径 + “v” + 股票名称 + “v.dat”)
文件长度 = 取字节集长度 (集文件)
数据位置 = 第二数据 × 4 + 4
数据个数 = 10
如果 (数据个数 > 1)
如果 (文件长度 ≥ 数据位置)
临时字节集 = 字节集替换 (集文件, 数据位置 - 3, 4, 到字节集 (第一数据))
写到文件 (写出路径 + 股票代码 + “.dat”, 临时字节集)
临时字节集 = 集文件 + 取空白字节集 (数据位置 - 文件长度)
临时字节集 = 字节集替换 (集文件, 数据位置 - 3, 4, 到字节集 (第一数据))
写到文件 (写出路径 + 股票代码 + “.dat”, 临时字节集)

如果 (文件长度 ≥ 数据位置)
临时字节集 = 字节集替换 (集文件, 数据位置 - 3, 4, 到字节集 (第一数据))
写到文件 (写出路径 + 股票代码 + “.dat”, 临时字节集)
临时字节集 = 集文件 + 取空白字节集 (数据位置 - 文件长度)
临时字节集 = 字节集替换 (集文件, 数据位置 - 3, 4, 到字节集 (第一数据))
写到文件 (写出路径 + 股票代码 + “.dat”, 临时字节集)




最佳答案

查看完整内容

#include #include #include #include using namespace std; // 读取文件内容到字节集(vector) vector read_file(const string& file_path) { vector buffer; ifstream file(file_path, ios::binary | ios::ate); // 以二进制模式打开,指针定位到末尾 if (!file.is_open()) { return buffer; // 文件打开失败返回空 } streamsize size = file.tellg(); // 获取文件大小 if (size > 0) { ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值
结帖率:100% (16/16)

签到天数: 5 天

发表于 昨天 12:56 | 显示全部楼层   广东省广州市
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;

// 读取文件内容到字节集(vector<unsigned char>)
vector<unsigned char> read_file(const string& file_path) {
    vector<unsigned char> buffer;
    ifstream file(file_path, ios::binary | ios::ate); // 以二进制模式打开,指针定位到末尾
    if (!file.is_open()) {
        return buffer; // 文件打开失败返回空
    }

    streamsize size = file.tellg(); // 获取文件大小
    if (size > 0) {
        file.seekg(0, ios::beg); // 指针移回开头
        buffer.resize(static_cast<size_t>(size));
        file.read(reinterpret_cast<char*>(buffer.data()), size); // 读取文件内容
    }
    file.close();
    return buffer;
}

// 将数据写入文件
void write_file(const string& file_path, const vector<unsigned char>& data) {
    ofstream file(file_path, ios::binary); // 以二进制模式写入
    if (file.is_open()) {
        file.write(reinterpret_cast<const char*>(data.data()), data.size());
        file.close();
    }
}

// 将float转换为4字节字节集(对应原代码中双精度转4字节,这里按单精度处理)
vector<unsigned char> float_to_bytes(float value) {
    vector<unsigned char> bytes(4);
    memcpy(bytes.data(), &value, 4); // 内存拷贝获取字节
    return bytes;
}

int main() {
    // 初始化变量(对应易语言局部变量)
    string 股票代码 = "";
    string 股票名称 = "";
    string 写出路径 = "d:\\aa\\";
    vector<unsigned char> 集文件;
    int 数据位置;
    int 数据个数 = 10;
    double 第一数据 = 0.0;
    double 第二数据 = 0.0;
    size_t 文件长度;
    vector<unsigned char> 临时字节集;

    // 读取目标文件
    string read_path = 写出路径 + "v" + 股票名称 + "v.dat"; // 构造读取路径
    集文件 = read_file(read_path);
    文件长度 = 集文件.size();

    // 计算数据位置(原逻辑:第二数据×4 + 4)
    数据位置 = static_cast<int>(第二数据) * 4 + 4;

    // 原代码中数据个数>1和否则的逻辑完全相同,这里合并处理
    if (文件长度 >= static_cast<size_t>(数据位置)) {
        // 文件长度足够,直接替换指定位置数据
        临时字节集 = 集文件;
        // 计算替换起始位置(易语言字节集索引从1开始,转换为C++的0开始索引)
        int start_pos = 数据位置 - 3 - 1; // 数据位置-3是易语言起始位置,减1转为0基
        // 确保替换范围有效
        if (start_pos >= 0 && start_pos + 4 <= 临时字节集.size()) {
            vector<unsigned char> replace_bytes = float_to_bytes(static_cast<float>(第一数据));
            memcpy(&临时字节集[start_pos], replace_bytes.data(), 4); // 替换4字节
        }
    } else {
        // 文件长度不足,先补充空白字节(0x00)
        临时字节集 = 集文件;
        size_t need_pad = 数据位置 - 文件长度; // 需要补充的字节数
        临时字节集.insert(临时字节集.end(), need_pad, 0x00); // 补充空白字节

        // 替换指定位置数据
        int start_pos = 数据位置 - 3 - 1;
        if (start_pos >= 0 && start_pos + 4 <= 临时字节集.size()) {
            vector<unsigned char> replace_bytes = float_to_bytes(static_cast<float>(第一数据));
            memcpy(&临时字节集[start_pos], replace_bytes.data(), 4);
        }
    }

    // 写出处理后的文件
    string write_path = 写出路径 + 股票代码 + ".dat"; // 构造写出路径
    write_file(write_path, 临时字节集);

    return 0;
}

评分

参与人数 1好评 +1 收起 理由
96692 + 1 欢迎常来帮助新人,谢谢~

查看全部评分

回复

使用道具 举报

签到天数: 5 天

发表于 昨天 13:00 | 显示全部楼层   四川省德阳市
一包华子

点评

好啊   河北省廊坊市  发表于 昨天 13:39
回复

使用道具 举报

结帖率:98% (438/446)

签到天数: 9 天

发表于 昨天 13:23 | 显示全部楼层   浙江省杭州市
回复

使用道具 举报

结帖率:98% (438/446)

签到天数: 9 天

发表于 昨天 13:23 | 显示全部楼层   浙江省杭州市
回复

使用道具 举报

结帖率:97% (28/29)

签到天数: 8 天

发表于 昨天 13:42 | 显示全部楼层   广东省惠州市
用炫语言按着这个写!它编译解析后的c++源码就是你想要的!

点评

易语言还不咋好呢,不想学别的了   河北省廊坊市  发表于 昨天 13:58
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

关闭

精易论坛 - 有你更精彩上一条 /2 下一条

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表