[英]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) << ' ';
請注意,多字節整數中的字節順序取決於 endian-ness 。 在小端機器上,該順序是保留的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.