2

私はPythonについてあまり知りませんが、ドキュメントからわかることから、コードは次のとおりです。

   str = "AAAA"
   str += pack("<I", 0)

pack 関数の結果を str に追加します。これは、リトル エンディアン スタイルの整数値 0 になります。私の質問は、これに相当する C はどうなるかということです。それはちょうどでしょうか:

   char str[20] = "AAAA";
   strcat(str, "\x00");

?...


std::iteratorというメンバーがいることを活かして、やりたいことができると思いますiterator_category。これをSFINAEと組み合わせると、次のようなものが得られます。

#include <iostream>
#include <vector>

template <class X>
class my_class {
public:
    my_class(X a, X b) {
        std::cout << "in my_class(X,X)" << std::endl;
    }

    template <class Iter>
    my_class(Iter a, Iter b, typename Iter::iterator_category *p=0) {
        std::cout << "in my_class(Iter,Iter)" << std::endl;
    }
};

int
main()
{
    char buf[] = "foo";
    std::vector<char> v;

    my_class<int> one(1, 2);
    my_class<char*> two(&buf[0], &buf[3]);
    my_class<char> three(v.begin(), v.end());

    return 0;
}

これは以下を出力します:

in my_class(X,X)
in my_class(X,X)
in my_class(Iter,Iter)
4

1 に答える 1

2

strcat()最初の NUL で停止するので、いいえ。

char str[20] = "AAAA";
int val = 0;
int nval = htole32(val);
memcpy(str + 4, (char*)&nval, 4);
于 2012-05-27T01:59:43.833 に答える