C++ 'php_sprintf'如何返回此值?

C++ 'php_sprintf' HOW to return this value?

本文关键字:返回 php sprintf C++ 何返回      更新时间:2023-10-16
void PrintMACaddress(unsigned char MACData[]){
php_sprintf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02Xn", 
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}

输出代码为:

return PrintMACaddress(MACData);

当我点击"构建"时,它会显示以下错误:

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

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

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

您是想将MAC地址打印到标准输出还是字符串?

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

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

如果你想返回值而不是将其打印到输出,有几点需要注意:

  • 在C++中使用字符串时,可以将其表示为char *std::string
  • 使用std::string是C++的发展方向
  • 使用char *更像是C风格。您必须自己管理内存阵列(在堆栈上分配或使用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-%02Xn", 
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-%02Xn", 
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 更新了答案的第二部分

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

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