我正在BinaryWriter使用一个MemoryStream.
public class PacketWriter : BinaryWriter
{
public PacketWriter(Opcode op) : base(CreateStream(op))
{
this.Write((ushort)op);
}
private static MemoryStream CreateStream(Opcode op) {
return new MemoryStream(PacketSizes.Get(op));
}
public WriteCustomThing() {
// Validate that MemoryStream has space?
// Do all the stuff
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,PacketWriter只要有可用空间(已经定义PacketSizes),我想使用write .如果没有可用空间,我想要抛出异常.MemoryStream如果你写过容量,似乎只是动态分配更多的空间,但我想要一个固定的容量.我是否可以在不需要每次检查长度的情况下实现此目的?到目前为止,我想到的唯一解决方案是覆盖所有Write方法BinaryWriter并比较长度,但这很烦人.
我开始在Android中开发,但是我在使用Eclipse时遇到了一些问题.
我刚刚重新安装了当前的SDK,但在尝试向Eclipse显示路径时,我收到以下错误:
找不到C:\ Program Files(x86)... droid\android-sdk\tools\emulator.exe!
我很确定我找到了正确的文件夹..这到底发生了什么?我被告知新的SDK不会造成这个问题.
我似乎在使用迭代器在向量中显示项目时遇到问题.可能,我只需要另一组眼睛来看它.
vector<string> tempVector;
vector<string>::iterator it;
it = tempVector.begin();
tempVector.push_back("1");
cout << *it;
Run Code Online (Sandbox Code Playgroud)
我知道这不是完整的代码,但它是唯一运行的部分.输出是段错误.迭代器是否指向向量的开头?我本以期待cout获得"1".
我一直在读这里的 istream :: ignore().我想我得到了它所做的功能的主要思想,但我已经看到了一些只接受使用这个函数的数字输入的例子,我不确定它为什么会起作用.
为什么这段代码会忽略除数字输入之外的所
#include <iostream>
#include <sstream>
#include <limits>
int main()
{
std::istringstream input("1\n"
"some non-numeric input\n"
"2\n");
for(;;) {
int n;
input >> n;
if (input.eof() || input.bad()) {
break;
} else if (input.fail()) {
input.clear(); // unset failbit
input.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
} else {
std::cout << n << '\n';
}
}
}
Run Code Online (Sandbox Code Playgroud)
我原以为istream :: ignore()会忽略由某个数字指定的任何和所有字符,直到分隔符为止.