将字节打印为长字节

Print bytes as longlong

本文关键字:字节 打印      更新时间:2023-10-16

我有一个指向 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数组中读取LONGLONG

如果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返回的值的类型说明符应该是%zu%Iu,而不是%d。对于long long来说,它应该是%lld.