c++ 如果十六进制值为34,则将其更改为32,如果是2B,则将其更改为2C [关闭]

o8x7eapl  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(116)

已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

3天前关闭。
Improve this question
我试图在过去的5天,以找出如何使我的程序说,如果十六进制值是34,然后将其更改为32:

如果值是2C,则将其更改为2B:

到目前为止,我一直在处理这段代码:

#include <fstream>
#include <iostream>
    
int main()
{
    int value;
    
    if (value > 0x34)
    {
        std::fstream binaryFile("test.tex", std::ios::in | std::ios::out | std::ios::binary);
        binaryFile.seekp(0x18/*offsetToWrite*/);
        binaryFile << char(0x32/*ValueToReplace*/);  
    } 
    else if (value < 0x2C) {
        std::fstream binaryFile("test.tex", std::ios::in | std::ios::out | std::ios::binary);
        binaryFile.seekp(0x18/*offsetToWrite*/);
        binaryFile << char(0x2B/*ValueToReplace*/);  
    }
}

我尝试使用ifelse if语句,但它们不起作用。

gg58donl

gg58donl1#

你的value变量是 uninitialized,所以你的第一个if语句有 undefined behavior
你需要先打开文件,查找到所需的位置,从文件中读取值,然后比较值,如果需要的话,然后查找回前一个位置,并将新值写入文件。
此外,int在这种情况下是错误的数据类型,流需要char类型。而且,当在以二进制模式打开的文件上执行I/O时,不应该使用operator<<,而应该使用put()write()方法。operator>>get()也是如此。
不要忘记错误检查!
试试类似这样的东西:

#include <fstream>
#include <iostream>
    
int main()
{
    std::fstream binaryFile("test.tex", std::ios::in | std::ios::out | std::ios::binary);
    if (!binaryFile.is_open()) {
        std::cerr << "Unable to open file\n";
        return -1;
    }

    if (!binaryFile.seekg(0x18/*offsetToRead*/)) {
        std::cerr << "Unable to seek file for reading\n";
        return -1;
    }

    char value;
    if (!binaryFile.get(value)) {
        std::cerr << "Unable to read from file\n";
        return -1;
    }

    if (value == 0x34) {
        value = 0x32/*ValueToReplace*/;
    } 
    else if (value == 0x2C) {
        value = 0x2B/*ValueToReplace*/;
    }
    else {
        std::cout << "Value not updated!\n";
        return 0;
    }

    if (!binaryFile.seekp(0x18/*offsetToWrite*/)) {
        std::cerr << "Unable to seek file for writing\n";
        return -1;
    }

    if (!binaryFile.put(value) {
        std::cerr << "Unable to write to file\n";
        return -1;
    }

    std::cout << "Value updated!\n";

    return 0;
}

相关问题