typedef unsigned char BYTE;
std::vector<BYTE> bytes = readFile(path.c_str());
假设我想在向量中从位置30到34进行打印。
我试过这个:
unsigned char chars[4];
for (int i = 30; i < 34; i++)
{
chars[i-30] = bytes[i];
}
std::cout << chars << std::endl;
我得到一个奇怪的符号,就是这样。 从30到34的字符向量包含\ x14,\ 0 \ 0 \ 0。 我尝试将chars转换为unsigned int和类似的东西。
答案 0 :(得分:0)
如果你只是写std::cout << chars << std::endl
,当然它会打印奇怪的东西,因为字符是一个指针。它会在其地址和以下位置打印该值,直到其到达的值为\0
。在chars
数组上循环以打印其内容,而不是尝试直接打印它。如果您希望输出格式正确,也可以转换为int:
for (int i = 0; i < 4; i++) {
std::cout << static_cast<unsigned int>(chars[i]) << std::flush;
}
答案 1 :(得分:0)
您也可以使用它(是的,它会跳过'\0'
):
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef unsigned char BYTE;
struct printer{
void operator()(BYTE c){
if(c != 0){
cout << c;
}
}
} printer;
int main() {
vector<BYTE> v ={'a', '\0' ,'b', '\0', 'c', 'D'};
BYTE a[6] = {'h', '\0', 'i', '\0', 'o', 'p'};
for_each (v.begin(), v.end(), printer);
cout<<endl <<"Now array" << endl;
for_each (a, a + 6, printer);
return 0;
}
On ideone以及......