2009-09-19 6 views
0

Я пишу свой байт-код и виртуальную машину (на .NET), и одна вещь, которую я не могу понять, - это встроить строки в мой байт-код. Любые идеи теперь, как я должен это делать?Как строки встроены в двоичные файлы?

+0

Это называется байт-код в Java. В .NET это CIL, поэтому я обновил теги. Вы консультировались с ссылкой CIL? –

+0

нет, я пишу на платформе .net программу, которая интерпретирует массив байтов как собственный собственный стиль байт-кода. – RCIX

+0

То, что я не могу понять, - это встроить в этот массив ничего, кроме чисел. – RCIX

ответ

1

Очевидно, вы определяете свой собственный байтовый код. это не имеет никакого отношения к синтаксису/грамматике .NET CIL, правильно?

Если да, и если вы касаетесь того, как кодировать строки (в отличие от других инструкций, таких как прыжки, циклы и т. Д.), Вы можете просто придумать для себя свою «инструкцию».

Например, шестнадцатеричный код «01xx» может быть для строки, содержащей xx байты (0 -255). Затем вашему языковому интерпретатору будет учиться хранить эту строку в стеке (или в любом случае) и переходить на декодирование следующего байтового кода, расположенного в байтах xx дальше по потоку байт-кода.

Если вы относитесь как смешивать символьные данные и числовые данные в любом хранилище вы имеете в байткод, просьба представить специфику и, возможно, кто-то может помочь ...

+0

Правильно, я делаю свое. Я получаю то, что вы говорите, но инструкция ieach в моем байткоде состоит из 4 отдельных байтов (1 для кода операции и 3 других, назначение которых зависит от команды), и я бы хотел избежать переменной длины инструкции. Его можно было бы безопасно достичь с помощью кодирования длины данных в самой инструкции, но это сделало бы его намного более сложным ... – RCIX

+1

Я вижу преимущества наличия байт-кода с фиксированной длиной и форматом. В этом случае строки могут быть просто реализованы как инструкция для объявления переменной (которую вы можете легко спроектировать), в которой индекс (будь то адрес, смещение, индекс ...), где хранится фактическая строка. Разница с регулярной переменной заключается в том, что хранилище, в котором находится строка, инициализируется строковым значением. Действительно, с помощью трехбайтовых инструкций вы можете быть ограничены для других типов, кроме строк (скажите, как вы кодируете числовое значение больше 8 миллионов? – mjv

+0

Это другое дело, я тоже немного озадачен ... Но я могу просто продолжайте и делайте это. Спасибо! – RCIX

0

Если вы можете хранить числа в массиве, а затем вы можете хранить данные ASCII в том же массиве. Игнорируя идею строки как класса, простая строка - это всего лишь массив символов, и в C байт со значением 0 указывает конец строки.

Как простое доказательство правильности концепции в C:

int main() 
{ 
    putchar(104); // h 
    putchar(101); // e 
    putchar(108); // l 
    putchar(108); // l 
    putchar(111); // o 
    putchar(10); // \n 
    return 0; 
} 

Выход:

 
$ ./a.out 
hello 

Может reference on character arrays as strings бы помочь?

+0

Это не совсем так. Я пытаюсь вставлять строки с другими байтами (которые, случается, являются инструкциями в моем собственном пользовательском формате), и я не уверен, как это сделать. – RCIX

 Смежные вопросы

  • Нет связанных вопросов^_^