gpt4 book ai didi

C printf 无符号字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:34 25 4
gpt4 key购买 nike

我有一个无符号字符数组 unsigned char* name = malloc(nameLength); - 我如何用 printf 打印它? %s 似乎没有正常工作,%u 也没有(看到随机图标)。

以下是我如何创建要打印的数据:

__int32 nameLength;
ReadProcessMemory(hProcess, (LPCVOID)(classNamePtr + 0x0004), &nameLength, sizeof(__int32), 0); //Reads nameLength to be 13 in this case
unsigned char* name = malloc(nameLength+5); //Add 5 for good measure, it is null terminated
ReadProcessMemory(hProcess, (LPCVOID)(nameStrPtr), name, nameLength, 0);
name[nameLength] = 0; //null terminate

printf("%s", name); //Outputs single character strange characters, like an up icon

最佳答案

当检测到不可打印的字符时,输出转义序列或十六进制值

#include <ctype.h>
#include <string.h>
#include <stdio.h>

int printf_ByteArray(const unsigned char *data, size_t len) {
size_t i;
int result = 0;
for (i = 0; i < len; i++) {
int y;
int ch = data[i];
static const char escapec[] = "\a\b\t\n\v\f\n\'\"\?\\";
char *p = strchr(escapec, ch);
if (p && ch) {
static const char escapev[] = "abtnvfn\'\"\?\\";
y = printf("\\%c", escapev[p - escapec]);
} else if (isprint(ch)) {
y = printf("%c", ch);
} else {
// If at end of array, assume _next_ potential character is a '0'.
int nch = i >= (len - 1) ? '0' : data[i + 1];
if (ch < 8 && (nch < '0' || nch > '7')) {
y = printf("\\%o", ch);
} else if (!isxdigit(nch)) {
y = printf("\\x%X", ch);
} else {
y = printf("\\o%03o", ch);
}
}
if (y == EOF)
return EOF;
result += y;
}
return result;
}

如果 data 包含每个字节之一,示例如下:

\0...\6\a\b\t\n\v\f\xD\xE\xF\x10...\x1F !\"#$%&\'()*+,-./0123456789:;<=>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F...\xFE\o377

转义序列的选择会因代码目标而异。上面的集合试图符合 C 解析器会接受的东西。
注意:最后一个 else ,始终输出一个 3 位八进制序列具有扫描优势,但是人们更习惯于十六进制而不是八进制。
调整为根据以下字符有条件地以十六进制打印。

关于C printf 无符号字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com