我有一个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);
}
我该怎么做?
答案 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;
}