来自无符号字符缓冲区的虚拟输出
Dummy output from an unsigned char buffer
我正在使用C++码通过USB从电子板读取一些二进制输出。输出存储在无符号字符缓冲区中。当我尝试打印出值或将其写入输出文件时,我得到的是虚拟输出而不是十六进制和二进制值,如下所示:
햻"햻"㤧햻"㤧햻"햻"㤧
这是输出文件声明:
f_out.open(outfilename, ios::out);
if (false == f_out.is_open()) {
printf("Error: Output file could not be opened.n");
return(false);
}
这是输出命令:
xem->ReadFromPipeOut(0xA3, 32, buf2);
f_out.write((char*)buf2, 32);
//f_out << buf2;
"xem"是USB通信的一个类。ReadFromPipeOut 方法,从电路板读取输出并将其存储在缓冲区 buf2 上。这是 main 内部的缓冲区定义:
unsigned char buf2[32];
为什么期望十六进制输出?你要求写char
s,它写char
s。
要输出十六进制值,您可以执行以下操作:
f_out << std::hex;
for (auto v : buf2)
f_out << +v << ' ';
若要在输出中获取数字,值应输出为整数,而不是字符。+v
通过整体推广将unsigned char
转化为unsigned int
。您可以更明确地使用它并使用static_cast<unsigned int>(v)
.
unsigned char buf[3] = {0x12, 0x34, 0x56};
std::cout << std::hex;
for (auto v : buf)
std::cout << static_cast<unsigned int>(v) << ' ';
// Output: 12 34 56
以二进制形式输出数字:
for (auto v : buf)
std::cout << std::bitset<8>(v) << ' ';
(这里不需要std::hex
和static_cast
(
要颠倒顺序:
for (auto it = std::rbegin(buf); it != std::rend(buf); ++it)
std::cout << std::bitset<8>(*it) << ' ';
请注意,多字节整数中的字节顺序取决于字节序。在小端机器上,订单是保留的。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 虚拟决赛作为安全
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 了解 Linux 虚拟内存:valgrind 的 massif 输出显示了有和没有 --pages-as-heap 的主要差异
- 来自无符号字符缓冲区的虚拟输出
- C 虚拟功能的输出
- 来自虚拟类别的输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 混淆了具有虚拟继承的程序输出
- 不会显示所需输出的虚拟继承
- 读取 USB 相机的输入编辑并将输出发送到 Windows 上的虚拟相机
- 虚拟函数输出奇怪的值
- 为什么我的输出流seg出错,而我的虚拟析构函数不起作用,但当我杀死虚拟的时候,它起作用了
- 虚拟功能输出
- 当使用vptr直接调用虚拟函数时,了解输出
- 返回一个小结构的虚拟函数-返回值与输出参数