ほとんどの場合、私はPythonで作業しているため、repr()
任意のバイトの文字列が渡されると、人間が読める16進形式で出力される関数を高く評価しています。最近、私はCでいくつかの作業を行っていて、Pythonrepr
関数を見逃し始めています。私はインターネットでそれに似たもの、できれば次のようなものを探していましたが、void buffrepr(const char * buff, const int size, char * result, const int resultSize)
運が悪かったのですが、これを行う簡単な方法を知っている人はいますか?
質問する
1129 次
3 に答える
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;
}
}
}
于 2012-07-22T15:59:35.607 に答える
0
最も簡単な方法は、printf()
/sprintf()
とフォーマット指定子%x
を使用することです。%X
于 2012-07-22T15:59:48.803 に答える
0
左側にストリームオブジェクトがある「<<」演算子に依存することで、この問題に部分的に取り組みました。この演算子をクラスに実装すると、それらのクラス(および標準のクラス)は次のソリューションで機能します。
次に、オブジェクトをprintf関数で使用できるac文字列に変換する関数とマクロを定義します。
// 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をac文字列に変換するマクロがあります。
#define c_repr(_myVar) (string_repr(_myVar).c_str())
このように呼んでください:
printf("prevXfm = %s newXfm = %s\n", c_repr(prevXfm), c_repr(newXfm));
Pythonクラスが独自のrepr()メソッドを実装できるのと同じように、「<<」を実装している限り、どのクラスもこのマクロで動作させることができます。
于 2016-11-30T01:36:06.967 に答える