C++ 写入字符串流无法正常工作

问题描述

这些天我一直在为 CHIP-8 制作汇编程序,今天我尝试实现操作码的参数以使其正常工作。但是,当我必须编写 2 个参数来完成操作码时,我有以下代码:

// Chip8Instruction is a struct I've made that holds the final machine code to be written,the mnemonic,// the argument count and the position for each argument in hex
void writeTwoArguments(Chip8Instruction instruction,const std::string& line,int lineNum,const std::string& romName) {
    unsigned int arg1;
    unsigned int arg2;
    
    std::string remainingLine = line;
    std::string testStr;

    std::stringstream stringStream;


    // Arguments are comma and then space separated,assume I give 3,FF
    std::string::size_type commaPos = line.find(',');
    
    if (commaPos != std::string::npos) {
        stringStream << std::hex << remainingLine.substr(0,commaPos); // This writes 3,like it should
        testStr = stringStream.str(); // Holds "3",like it should
        stringStream >> arg1; // This holds 0x3,like it should
        stringStream.str("");

        remainingLine.erase(0,commaPos+2); // FF remains,like it should
        stringStream << std::hex << remainingLine;
        testStr = stringStream.str(); // This holds nothing but it should have "FF",if I don't empty the stream it holds "3" from before
        stringStream >> arg2; // This also holds nothing but it should have 0xFF,holds 0x3 if not empty stream

        instruction.machineCode = instruction.start + (arg1 * instruction.arg1Pos) + (arg2 * instruction.arg2Pos);
    }

    writeMultipleDigitsToROM(romName,instruction.machineCode,lineNum);

}

最小可重现示例:

#include <iostream>
#include <sstream>

int main() {
   std::string line = "3,FF";

   std::stringstream stringStream;

   unsigned int int1;
   unsigned int int2;

   // Get position of comma
   std::string::size_type commaPos = line.find(',');

   // Get everything up to the comma
   stringStream << std::hex << line.substr(0,commaPos);
   stringStream >> int1; // This holds 0x3,like it should
   stringStream.str(""); 
   line.erase(0,commaPos+2); // "FF" remains,like it should
   stringStream << std::hex << line;
   stringStream >> int2; // This is empty but should be 0xFF
   
}

正如代码注释所描述的,保存的值要么是错误的,要么是过时的。可能是什么问题、原因以及如何解决?

感谢所有帮助,谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)