无法将char指针转换为整数

时间:2013-11-05 16:17:16

标签: c++ char type-conversion memcpy

我有一个char指针作为输入传递的函数。当我将char指针传递给unsigned char的输入时,它可以正常工作。但是,unsigned char的长度为1个字节,因此我只能获取一个字节长的值。但是,现在我必须将4字节长的输入转换为变量。

我的功能是:

void charPointer (char* aBinary)
{
    unsigned char aByte = '\0';

    memcpy(&aByte, &(aBinary[0]), 1);

    m1 = static_cast<short>(aSingleByte);
}

我该怎么做?

3 个答案:

答案 0 :(得分:1)

这很简单

unsigned char fourBytes[4];
memcpy(fourBytes, aBinaryIPAddress, 4);

答案 1 :(得分:0)

在您的情况下,您可以尝试以下操作。

int abc = *((const int *)fourBytes);

但是,如果fourBytes的字节顺序不同,则需要手动将每个字节复制为整数,如下所示。

int addr;
addr = 0;
addr = aBinaryIPAddress[0];
addr = (addr << 8)|aBinaryIPAddress[1];
addr = (addr << 8)|aBinaryIPAddress[2];
addr = (addr << 8)|aBinaryIPAddress[3];

您也可以通过以下方式执行此操作

int addr;
memcpy(&addr, aBinaryIPAddress, numbytes); //numbytes = 4

请注意,short长度为2个字节。

答案 2 :(得分:0)

看一下这个样本: 'f'函数从缓冲区获取4个字节并将它们作为int返回。

小端的cout结果将是4030201,

在big endian机器上它将是1020304。

#include <iostream>

int f(char* buff)
{
    int &n=*(int*)buff;
    return n;
}

int main()
{
    char buff[20]={1,2,3,4,5};

    std::cout<<std::hex<<f(buff)<<std::endl;

    return 0;
}