将字节打印为长字节
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
数组中读取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
.
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 将字节打印为长字节
- 我该如何循环遍历我的数组(缓冲区——包含一个文本文件),并将其打印成30字节的块
- 在 Visual Studio 调试器中,如何从内存中打印字节范围?
- C/C++ 以十六进制打印字节,得到奇怪的十六进制值
- 在C中垂直打印字节数组
- 如何将二进制字节转换为可打印的数值
- 将 MFRC522 UID 十六进制字节转换为可打印的小数
- 如何在文件中打印位而不是字节
- 手动打印 N 字节整数
- 如何在 4 字节整数中打印出每个字节的内容
- 如何将字节打印为十六进制
- 一次打印 2 个字节的十六进制数字
- 在Qt中打印8字节整数时出错
- 将整数打印为以小端序排列的4个字节的集合
- 以十六进制或十进制形式将std::字符串作为字节序列打印到stdout
- 打印字节的正确类型转换
- 打印字节序列
- Regex不可打印字节