diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index a7d80b204..dfb7d62d3 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -1120,16 +1120,28 @@ class FlatBufferBuilder /// where the vector is stored. template Offset> CreateVector(const T *v, size_t len) { StartVector(len, sizeof(T)); - if (sizeof(T) == 1) { - PushBytes(reinterpret_cast(v), len); - } else { - for (auto i = len; i > 0; ) { - PushElement(v[--i]); + #if FLATBUFFERS_LITTLEENDIAN + PushBytes(reinterpret_cast(v), len * sizeof(T)); + #else + if (sizeof(T) == 1) { + PushBytes(reinterpret_cast(v), len); + } else { + for (auto i = len; i > 0; ) { + PushElement(v[--i]); + } } - } + #endif return Offset>(EndVector(len)); } + template Offset>> CreateVector(const Offset *v, size_t len) { + StartVector(len, sizeof(Offset)); + for (auto i = len; i > 0; ) { + PushElement(v[--i]); + } + return Offset>>(EndVector(len)); + } + /// @brief Serialize a `std::vector` into a FlatBuffer `vector`. /// @tparam T The data type of the `std::vector` elements. /// @param v A const reference to the `std::vector` to serialize into the