diff --git a/cpp/src/arrow/compute/kernels/codegen_internal.h b/cpp/src/arrow/compute/kernels/codegen_internal.h index 90c4b32415aed..8c49e796623e7 100644 --- a/cpp/src/arrow/compute/kernels/codegen_internal.h +++ b/cpp/src/arrow/compute/kernels/codegen_internal.h @@ -663,14 +663,16 @@ struct ScalarUnaryNotNullStateful { static void Exec(const ThisType& functor, KernelContext* ctx, const ArrayData& arg0, Datum* out) { ArrayData* out_arr = out->mutable_array(); - auto out_data = out_arr->GetMutableValues(1, 0) + 16 * out_arr->offset; + // Decimal128 data buffers are not safely reinterpret_cast-able on big-endian + using endian_agnostic = std::array; + auto out_data = out_arr->GetMutableValues(1); VisitArrayValuesInline( arg0, [&](Arg0Value v) { - functor.op.template Call(ctx, v).ToBytes(out_data); - out_data += 16; + functor.op.template Call(ctx, v).ToBytes( + out_data++->data()); }, - [&]() { out_data += 16; }); + [&]() { ++out_data; }); } };