簡體   English   中英

來自無符號字符緩沖區的虛擬輸出

[英]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 << ' ';

要在輸出中獲取數字,值應作為整數輸出,而不是作為字符輸出。 由於積分提升, +vunsigned 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::hexstatic_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM