Показать сообщение отдельно

  #6  
Старый 31.03.2021, 19:52
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

У меня уже мозг расплавился от этой чихарды.

Имеется старая игра warzone2100, где по указателю хранится строка



Это однобайтовая кодировка, но лишь cheat engine выводит её нормально

Читая её как char*, я получаю козяблики

Выводя её через opengl рендер, вижу тоже самое, что и через MessageBoxA

CharToOem и наоборот -- никак не помогают прочитать эту чёртову строку.

Нагуглил функцию "определения кодировки", и по её показаниям, это не ascii и не ut8

Цитата:
Сообщение от Спойлер  


C++:





Код:
enum
DetectedCoding
{
ASCII
,
UTF8
,
OTHER
}
;
DetectedCoding
DetectEncoding
(
const
std
::
string
&
s
)
{
const
char
*
cs
=
s
.
c_str
(
)
;
DetectedCoding d
=
ASCII
;
while
(
*
cs
)
{
unsigned
char
b
=
(
unsigned
char
)
*
(
cs
++
)
;
if
(
b
&
0x80
)
{
// not a plain ASCII character
// if the string is already UTF8 encoded, then it must conform to a multibyte sequence standard. Let's verify it
if
(
b
Это совершенно точно НЕ мой косяк при чтении, потому что все указатели проверяются, и чтение происходит, лишь когда курсор наведён на иконку элемента, обладающего строкой по нужному оффсету:

C++:





[CODE]
int
*
ptr
=
(
int
*
)
(
(
char
*
)
GetModuleHandleA
(
0
)
+
0x9C4EE0
)
;
int
lastnumber
=
0
;
int
*
elid2
=
0
;
char
*
buff2
=
0
;
bool
checkptr
(
)
{
if
(
*
ptr
==
0
)
return
0
;
elid2
=
(
int
*
)
(
*
ptr
+
8
)
;
if
(
*
elid2
)
{
buff2
=
(
char
*
)
(
*
ptr
+
0xD4
)
;
if
(
*
(
int
*
)
elid2
>=
IDSTAT_START
)
if
(
*
(
int
*
)
elid2



Отчаянно прошу помощи! Нихрена нагуглить не смог, все мне известные способы конвертации -- тоже не работают! Ужасно!
 
Ответить с цитированием