簡體   English   中英

如何在C ++中將十六進制值的char數組轉換為單個整數值?

[英]How to convert a char array of hex values to a single integer value in c++?

我有一個十六進制值的char數組,想將它們轉換為單個整數值。 我當前使用的代碼有兩個問題:

問題1:運行此命令后存儲在strHex中的值是-當我希望將其設置為“ 000927C0”時為“ 0927ffffffc0”-添加額外的“ ffffff”的原因是什么?

問題2:如果可能的話,我想一個解決方案將十六進制值的char數組轉換為整數,而不使用stringstream。

char cArray[4] = { 0x00, 0x09, 0x27, 0xC0 }; // (600000 in decimal)

std::stringstream ss;
for (int i = 0; i < 4; ++i)
{
    ss << std::hex << (int)cArray[i];
}
std::string strHex = ss.str();

int nHexNumber;
sscanf(strHex.c_str(), "%x", &nHexNumber);

轉換后nHexNumber應該為600000,它給我-64。

#include <stdint.h>
#include <iostream>

int main(int argc, char *argv[]) {
        unsigned char cArray[4] = { 0x00, 0x09, 0x27, 0xC0 };
        uint32_t nHexNumber = (cArray[0] << 24) | (cArray[1] << 16) | (cArray[2] << 8) | (cArray[3]);

        std::cout << std::hex << nHexNumber << std::endl;
        return 0;
}

編輯:MM所指出,這不取決於最初聲明的字節序

QEMU下的輸出:

user@debian-powerpc:~$ uname -a
Linux debian-powerpc 3.2.0-4-powerpc #1 Debian 3.2.51-1 ppc GNU/Linux
user@debian-powerpc:~$ ./a.out
927c0
user@debian-powerpc:~$

在Windows上的Ubuntu下:

leus@owl:~$ uname -a
Linux owl 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
leus@owl:~$ ./a.out
927c0
leus@owl:~$
#include<arpa/inet.h>
#include<iostream>
using namespace std;

union {
    unsigned char cA[4] = { 0x00, 0x09, 0x27, 0xc0 };
    int k;
} u;

int main() 
{
    cout << htonl(u.k) << endl;
}

簡單的方法是使用htonl ...

暫無
暫無

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

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