2
void PrintMACaddress(unsigned char MACData[]){
    php_sprintf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}

输出代码为:

return PrintMACaddress(MACData);

当我单击“构建”时,它显示此错误:

错误 C2664:“php_sprintf”:无法将参数 2 从“unsigned char”转换为“const char *

请帮忙,我是 C++ 的新手,我已经搜索了很多天来寻找这个错误。

4

2 回答 2

1

我假设它php_sprintf指的是您为 PHP 编写扩展时使用的内部 PHP 函数。C然后它具有与函数相同的参数sprintf

您是否尝试将 MAC 地址打印到标准输出或字符串?

如果要打印到标准输出(随后打印到控制台),请使用php_printf. 所以你的代码看起来像:

void PrintMACaddress(unsigned char MACData[]){
    php_printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}

如果要返回值而不是将其打印到输出中,则需要注意以下几点:

  • 在 C++ 中使用字符串时,可以将其表示为char *std::string
  • 使用std::string是 C++ 的方式。
  • 使用char *C-ish 风格。您必须自己管理内存数组(在堆栈上分配或使用new []and delete []

如果我使用以下方法重写该方法std::string

std::string PrintMACaddress(unsigned char MACData[]){
    char tmp_[32]; // The output string should be always 32 bytes long
    php_sprintf(tmp_,"MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
    return std::string(tmp_);
}

如果您想(或必须)使用char *

char *PrintMACaddress(char *MACString, unsigned char MACData[]){
    php_sprintf(MACString,"MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
    return MACString;
}

在这里,该方法获得了一个新参数 - 指向至少 32 字节的已分配数组的指针。然后它返回指向该数组的指针。你会像这样使用它:

char macString[44];
PrintMACaddress(macString, MACData);
/* Use the string stored in macString */   

或者

char* macString = new char[44];
PrintMACaddress(macString, MACData);
/* Use the string stored in macString */   
delete [] macString;

编辑:用 php_sprintf 更新了答案的第二部分

于 2012-12-05T02:57:57.577 回答
0

据我所知,第二个参数不能是unsigned char MACData[]你设置的;正如提到的错误。如果它必须是一个unsigned char,使用(const char *)将它转换为一个常量字符。

void PrintMACaddress(unsigned char MACData[]){
    php_sprintf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        (const char *)MACData[0], (const char *)MACData[1], (const char *)MACData[2], (const char *)MACData[3], (const char *)MACData[4], (const char *)MACData[5]);
}
于 2012-12-05T02:17:02.490 回答