2012-09-18 1 views
0

Suite à this question, j'ai besoin de définir des valeurs de mémoire pour les chaînes, plutôt que des longs. J'ai remarqué en utilisant Cheat Engine que si je définis une valeur d'une adresse à une chaîne en parcourant la région de mémoire, il y a une valeur entière, comme "6513249" étant "abc".Conversion de la chaîne en long pour l'édition de la mémoire en C#

Comment est-ce que je devrais convertir une chaîne à cette forme, pour l'usage comme long?

Merci.

Répondre

2

Convertissez la chaîne en tableau d'octets avec un codage approprié en utilisant Encoding.GetBytes et, si vous écrivez des octets directement, vous ne devrez peut-être pas convertir les longs en afterall. Si vous devez convertir en longs - assurez-vous que vous comprenez endiannes pour savoir quels octets devraient être d'abord, encore une fois comprendre l'encodage et convertir les caractères (y compris potentiellement les paires de substitution) en tableau d'octets avec Encoding.GetBytes et combiner des valeurs longues sur 8 octets en utilisant des opérateurs de décalage (>> et <<) sur des octets. Il peut être plus facile d'encapsuler le tableau d'octets résultant dans MemeoryStream et que BinaryReader et de lire des valeurs longues.

+0

Très bien, maintenant quelque part. L'utilisation de GetBytes renvoie "abc" comme "610062006300" plutôt que "6513249". Aussi, j'ai quelques valeurs (par exemple "10") que j'ai besoin du tableau d'octets égal, si cela a du sens. Avoir la chaîne "10" passée à travers le tableau d'octets conduit à "3130", et j'en ai besoin pour être la valeur d'origine. – Kaikz

+0

Presque oublié: j'ai également besoin de mettre à zéro une adresse avant de définir une valeur, que dois-je utiliser pour cela? – Kaikz

+0

@Kaikz, peu importe ce que vous dites ne font pas beaucoup de sens parce que vous utilisez des chaînes de caractères au hasard comme une représentation chaîne, décimale ou hexadécimale de nombre entier. S'il vous plaît comprendre yourslef quels codages vous avez besoin et trier ce que vous essayez d'écrire. GetBytes avec l'encodage correct est likley tout ce dont vous avez besoin pour convertir des chaînes en octets, les nombres n'ont pas besoin d'être convertis. N'oubliez pas que les triches deviennent rapidement obsolètes - alors assurez-vous que votre code triche est facilement configurable :) –