我假设它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 更新了答案的第二部分