簡體   English   中英

指針用於字節解析的哪種類型?

[英]Which type on pointer for byte parsing?

我正在為nodejs開發一個C ++插件,它使用一個nodejs Buffer對象並對其執行一些二進制操作。 我當前的問題是關於指針后面的數據:

JavaScript環境:

var buf = new Buffer([0x00, 0x7e, 0xff, 0xff]);

C ++后端代碼

int length = node::Buffer::Length(chunk);
char* head = node::Buffer::Data(chunk);

/* for debugging */
for (int i = 0; i < length; i++) {
    std::cout << hex << (int) head[i] << "\n";
}

/* outputs: 0x00 0x7e 0xffffffff 0xffffffff */

為什么指針將最后兩個字節解釋為0xffffffff而不是0xff? 我該如何解決?

char是帶符號的類型,這意味着0xff為-1,將其轉換為-1作為int ,表示為0xffffffff

您可以這樣解決:

std::cout << hex << (unsigned) (unsigned char) head[i] << "\n";

問題是在您的平台上默認情況下char是簽名的,因此(char)0xFF-1

寫吧:

std::cout << hex << (int)(unsigned char)head[i] << "\n";

有時寫以下代碼很有用:

typedef unsigned char byte;

接着:

std::cout << hex << (int)(byte)head[i] << "\n";

因為這樣的類型轉換: (int) head[i] 它將結果轉換為帶符號的int。 0xff是-1(作為有符號字符),而有符號int是0xfffffff。

僅僅因為該值從1個字節算術擴展到4個字節,所以0xff表示-1(一個字節),而0xffffffff表示-1(4個字節),為此,您必須使用“ unsigned char”作為“ head” ”數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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