[英]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.