は、ゲームは、現在でロードされている私はファイル名(文字列)を取得する工程(ゲーム)のメモリを読みたいプロセス・メモリからバイトの非固定長バッファからマップのをバイトストリーム/バッファから文字列に変換する際にガベージ文字を削除するにはどうすればよいですか?
の正確な長さの文字列を取得しますプロセスメモリ。
予測文字列がない固定長のものであり、可能な最大値は37であるので、私は、読み出し部は、Win32 APIを使用して簡単だった長さのバッファを37
を宣言しました。
byte[] pBuffer = new byte[37];
ReadProcessMemory((int)processHandle, (int)address, pBuffer, 37, ref read);
ここで、バイトを文字列に変換するコードを示します。
出力は正常ですが、文字列には表示されていないガベージ文字が含まれています。
ファイルを開こうとしたときに、FileExist(map)関数がfalseを返します。ファイルはフォルダ内にありますが、メモリから取得するすべての文字列に対してString.Lengthが37であることがわかりました。
例えばファイル名が"abc.bms"であり、そのな長さ(String.Lenghtは)です。私がこれまで試した
ソリューション: -
// string = string.Substring(0, string.IndexOf('\0'));
// string = string.Replace('\0');
// string = string.Trim();
文字列の長さは、私は、文字列からすべてのものを目に見えない文字を削除したい場合は、正しくないのですか?
あなただけのヌル文字を削除しますか? 'var res = str.Replace(" \ 0 "、string.Empty);'? –
いいえ、文字列のすべての余分な文字が欲しいです、私はファイルシステムのファイル名と比較したいです。明らかに文字列は問題ありませんが、正しいファイルパスを教えてくれない隠された余分な文字があります。 –
なぜエンコーディングとしてASCIIを使用していますか?この値をファイルパスとして使用します。 Win32 APIでは、文字列が.NETにあるように、ファイルパスはUTF-16です。Win32関数(NTFSで[Unicode]が必要とする完全な文字セットをサポートしていない)のWindows 95互換バリアント(xxxA)を使用していて、 "ANSI"エンコーディングでファイルパスを取得した場合は、特定のANSIエンコーディングを知るか、スレッドの現在のANSIコードページと同じであることを確認します。その場合(そして他の場合は)、 'Encoding.Default'を使用します。 –