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 ++的新手,我已经搜索了很多天这个错误。
答案 0 :(得分: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]);
}
如果要返回值而不是将其打印到输出中,则需要注意几点:
char *
或std::string
std::string
是C ++的方法。 char *
更多C
- ish风格。您必须自己管理内存阵列(在堆栈上分配或使用new []
和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
更新了答案的第二部分答案 1 :(得分: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]);
}