プチはまったポイント。
std::istreamでバイナリデータを読み出すとき、get()やread()なら生データを返してくれるが、operator>>を使うと一部の特殊文字が読み飛ばされる。std::ios::binaryの効き目もないみたい。
#include <iostream>
#include <sstream>
int main() {
std::string str("\x00\x01\x02\x03\x04\x05\x06\x07"
"\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
"\x10\x11\x12\x13\x14\x15\x16\x17"
"\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", 32);
std::istringstream is(str, std::ios::binary);
for (int i = 0; i < 32; i++) {
char c;
is >> c;
// c = is.get();
// is.read(&c, 1);
std::cout << "(" << i << ") : " << static_cast<int>(c) << std::endl;
}
return 0;
}
プラットフォーム依存しそうだけど、上のコードをMountain Lionで実行すると
(0) : 0
(1) : 1
(2) : 2
(3) : 3
(4) : 4
(5) : 5
(6) : 6
(7) : 7
(8) : 8
(9) : 14
(10) : 15
(11) : 16
(12) : 17
(13) : 18
(14) : 19
(15) : 20
(16) : 21
(17) : 22
(18) : 23
(19) : 24
(20) : 25
(21) : 26
(22) : 27
(23) : 28
(24) : 29
(25) : 30
(26) : 31
(27) : 31
(28) : 31
(29) : 31
(30) : 31
(31) : 31
こうなる。
0 件のコメント:
コメントを投稿