問題ありそうなのでこんな感じにしたわ;;;
const static int NECONV = (sizeof(uint64_t) - 1) / sizeof(short) + 1;
union LargeInt {
  short m_small[NECONV];
  uint64_t m_large;
};
static void writeLargeInt(const uint64_t x, std::array<short, NE>& arr) {
  LargeInt u;
  u.m_large = x;
  for (int i = 0; i < NECONV; i++) {
    arr[i] = u.m_small[i];
  }
}