1. C++ / Говнокод #13857

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    void gte::loadProps(const char* fileName){
        
    	propMap.clear();
    	s3eFile* g_FileHandle = s3eFileOpen(fileName, "rb");
    	while (!s3eFileEOF(g_FileHandle)) {
    		char c1=0;
    		char c2=0;
    		s3eFileRead(&c1, 1, 1, g_FileHandle);
    		s3eFileRead(&c2, 1, 1, g_FileHandle);
    		int len = 0;
    		len = (c2 & 0xFF) | ( (c1  & 0xff) << 8);
    		if (len==0) continue;
    		char* textData = new char[len+1];
    		textData[len] = 0;
    		s3eFileRead(textData, sizeof(char), len, g_FileHandle);
    		char* pos = strchr(textData, ':');
    		string key(textData, pos - textData);
    		string value(pos + 2, textData + len - pos - 2);//(textData,
    		propMap[key] = value;
    	}
    
    	s3eFileClose(g_FileHandle);
    }

    Чтение строки, первые 2 байта - длинна.
    Проект использует Marmalade SDK.

    Запостил: krypt, 27 Сентября 2013

    Комментарии (47) RSS

    • Возможно, так сделано чтобы не зависеть от порядка байт, но, тем не менее, выглядит странно. И если не ошибаюсь, на всех поддерживаемых платформах он little-endian
      Ответить
      • Только хотел сказать про порядок байтов. Хотя тут много чего ещё непонятного: если поддерживать разные платформы, то где поддержка 16битных процессоров (16битный знаковый инт и двухбайтовая длина могут привести к неприятным последствиям), почему в 15 строчке написано sizeof(char), а в 8-9 магическое число 1?

        Также непонятно, почему в 18 строчке pos+2 а не pos+1.
        Ответить
        • marmalade - он для написания кроссплатформенных игр. Win (phone и desktop), Android, iOS, blackbarry... То есть х86 или arm.
          Ответить
      • а я даже не пытаюсь делать кроссплатформенные файлы сохранёнки, такая я свинья
        Ответить
        • Паскаль делает это за вас, сэр.
          Ответить
          • кросс-платформенный паскаль
            ммм
            Ответить
            • Free Pascal ?
              Ответить
              • показать все, что скрыто<
                Паскаль делает это за вас, сэр.
                Free Pascal ?
                >
                ...Спускаюсь в переход вокзала, захожу в дверь с буквой "М". Сейчас девочкомальчик в штанах и с накрашенными губами продаст мне за пятерку билет в волшебную страну.
                Ответить
          • каким местом
            я же не хранию file of coolstruct
            у меня тупо file of byte
            и blokread на указатель
            Ответить
            • Да я, собственно, не про файлы. Ну да ладно
              Ответить
        • Что там от платформы зависит?
          Ответить
        • Это не сохранёнка, это локализация. Другой вопрос, что файл локализации должен читаться через реализованную в sdk компании функцию...
          Ответить
        • > кроссплатформенные файлы сохранёнки
          Да с того же андроида их хер извлечешь без рута (если ты писал не на флеху)... А на PC у тебя все равно только 32 битная версия. Так что всем пофиг, никто и не заметит некроссплатформенности сейвов ;)
          Ответить
        • Кстати говоря, у игры Cave Story+ сохраненки не переносимы между Windows и Linux. Автор, походу, тупо сохраняет struct, а компиляторы-то разные...
          Ответить
          • Если параметры упаковки и размерность в байтах совпадает, разницы быть не должно.
            А так - справедливо.
            Ответить
          • СИШКОПРОБЛЕМЫ
            Ответить
        • Хру-хру

          )
          Ответить
    • http://govnokod.ru/8225#comment114613
      Ответить
    • А что память тут течёт - никого не волнует?
      Ответить
    • Ахаха, где-то я этот код уже видел )))
      Ответить
      • Там еще есть кусочек

        void hge::loadTexts(const char* fileName) {
        textMap.clear();
        s3eFile* g_FileHandle = s3eFileOpen(fileName, "rb");
        while (!s3eFileEOF(g_FileHandle)) {
        char c1=0;
        char c2=0;
        s3eFileRead(&c1, 1, 1, g_FileHandle);
        s3eFileRead(&c2, 1, 1, g_FileHandle);
        int len = 0;
        len = (c2 & 0xFF) | ( (c1 & 0xff) << 8);
        if (len==0) continue;
        char* textData = new char[len+1];
        textData[len] = 0;
        s3eFileRead(textData, sizeof(char), len, g_FileHandle);
        char* pos = strchr(textData, ':');
        string key(textData, pos - textData);
        string value(pos + 2, textData + len - pos - 2);//(textData,
        replaceAll(value, "^", "\n");
        //s3eDebugOutputString("qqqqq1");
        //s3eDebugOutputString(value.c_str());
        //s3eDebugOutputString("qqqqq1");
        textMap[key] = value;
        cout<<textMap[key]<<endl;
        }
        textMap["-"] = "#";

        s3eFileClose(g_FileHandle);
        }//999
        Ответить

    Добавить комментарий