将字节打印为 longlong

Print bytes as longlong

我有一个指向 196 字节块的空指针。我需要将连续字节打印为 LONGLONG(__int64) 值。我正在使用以下块进行打印,但观察到应用程序崩溃。 我究竟做错了什么? 有更好的方法吗?

        LONGLONG* llx = 0;
        void *ptr = evt.MofData;
        for (int i = 0; i < evt.MofLength; i += 8)
        {
            llx = reinterpret_cast<LONGLONG*>(ptr);
            sprintf_s(msgbuf, "szof(LL[%d]), val[%ll]\n ", sizeof(LONGLONG), (*llx));
            OutputDebugString(msgbuf);
            llx = (LONGLONG *)llx + 1;
        }

使用memcpy:

constexpr std::size_t length = 196;
constexpr std::size_t n_blocks = length / sizeof(LONGLONG);
LONGLONG llx[n_blocks];
std::memcpy(llx, ptr, n_blocks * sizeof(LONGLONG));

现在您可以从 llx 数组中读取 LONGLONGs。

如果length不是编译时常量,可以使用std::vector:

const std::size_t length = get_length();    // not a compile-time constant
const std::size_t n_blocks = length / sizeof(LONGLONG);
std::vector<LONGLONG> llx(n_blocks);
std::memcpy(llx.data(), ptr, n_blocks * sizeof(LONGLONG));

此外,sizeof should be %zu%Iu 返回值的类型说明符,而不是 %d。对于 long long,它应该是 %lld