0

我有一个函数,char 指针作为输入传递给它。当我将 char 指针传递的输入传递给 unsigned char 时,它工作正常。但是,unsigned char 是 1 字节长,所以我只能取那些长为 1 字节的值。但是,现在我必须将 4 个字节长的输入放入一个变量中。

我的功能是:

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

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

    m1 = static_cast<short>(aSingleByte);
}

我该怎么做?

4

3 回答 3

1

这很简单

unsigned char fourBytes[4];
memcpy(fourBytes, aBinaryIPAddress, 4);
于 2013-11-05T16:23:11.907 回答
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 个字节长。

于 2013-11-05T16:29:42.073 回答
0

看看这个示例:'f' 函数从缓冲区中获取 4 个字节并将它们作为 int 返回。

在 little endian 上 cout 结果将是 4030201,

在大端机器上,它将是 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;
}
于 2013-11-05T17:04:03.920 回答