0

ここに私の問題があります: 1 つの uint32_t を介して 2 つの uint32_t を返す必要があります (API の設定方法のため...)。操作を逆にするために必要な他の値をハードコーディングできますが、関数間で渡されるパラメーターは単一の uint32_t のままにする必要があります。

2 つの 32 ビット int を 1 つの 64 ビット int にビット シフトできれば (ここで説明したように) これは些細なことですが、コンパイラはそれを好まないでしょう。数学的なペアリング関数も見ましたが、この場合にそれが必要かどうかはわかりません。

私は単純な暗号を設定することを考えました: unint32_t を暗号テキストにすることができ、キーをハードコーディングするだけで済みます。これは一ですが、やり過ぎのようです。

これは可能ですか?

4

3 に答える 3

1

uint32_t唯一uint32_tのパラメーターを構造体のインデックスとして使用して、中間グローバル データ構造体を使用して のペアを格納できます。

struct my_pair {
  uint32_t a, b;
};

std::map<uint32_t, my_pair> global_pair_map;

uint32_t register_new_pair(uint32_t a, uint32_t b) {
  // Add the pair of (a, b) to the map global_pair_map on a new key, and return the
  // new key value.
}

void release_pair(uint32_t key) {
  // Remove the key from the global_pair_map.
}

void callback(uint32_t user_data) {
  my_pair& p = global_pair_map[user_data];

  // Use your pair of uint32_t with p.a, and p.b.
}

void main() {
  uint32_t key = register_new_pair(number1, number2);

  register_callback(callback, key);
}
于 2014-01-16T18:02:00.270 に答える