我在Python工作的大部分时间,因此我对repr()
函数表示了极大的赞赏,当传递一串任意字节时,它将打印出人类可读的十六进制格式。最近我在C中做了一些工作,我开始想念python repr
函数。我一直在互联网上寻找与它类似的东西,最好像void buffrepr(const char * buff, const int size, char * result, const int resultSize)
但是我没有运气,是否有人知道这样做的简单方法?
答案 0 :(得分:1)
sprintf(char *,“%X”,b);
你可以像这样循环(非常简单):
void buffrepr(const char * buff, const int size, char * result, const int resultSize)
{
while (size && resultSize)
{
int print_count = snprintf(result, resultSize, "%X", *buff);
resultSize -= print_count;
result += print_count;
--size;
++buff;
if (size && resultSize)
{
int print_count = snprintf(result, resultSize, " ");
resultSize -= print_count;
result += print_count;
}
}
}
答案 1 :(得分:0)
最简单的方法是使用printf()
和sprintf()
格式说明符%x
/ %X
。
答案 2 :(得分:0)
我部分依靠“<<”来解决这个问题左侧有流对象的运算符。如果在类上实现此运算符,那么这些类(以及标准类)将适用于以下解决方案。
接下来我们定义一个函数和一个宏,它将你的对象转换为一个可以在printf函数中使用的c字符串:
// return a std::string representation of argument
template <typename T> std::string string_repr(T myVar)
{
std::stringstream ss;
ss << myVar;
return ss.str();
}
接下来我们有一个封装上述函数的宏,将std :: string转换为c字符串:
#define c_repr(_myVar) (string_repr(_myVar).c_str())
这样称呼:
printf("prevXfm = %s newXfm = %s\n", c_repr(prevXfm), c_repr(newXfm));
任何类都可以使用这个宏,只要它实现“&lt;&lt;”,就像任何Python类都可以实现自己的repr()方法一样。