Coder Social home page Coder Social logo

0x1801 / repa Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 89 KB

Функция на языке Си для конвертации строк из кодировки UTF-8 в Windows-1251 (CP1251) Utf8 to Windows-1251 converter

License: Other

C 100.00%
32-bit convert utf8 utf8-string windows-1251 efficient-algorithm cp1251 unicode unicode-characters unicode-converter

repa's Introduction

REPA

Функция на языке Си для конвертации строк из кодировки UTF-8 в Windows-1251 (CP1251)

Файл с функцией: https://github.com/0x1801/REPA/blob/main/utf8_2_win1251.c

  • Поставляется в виде исходного кода.
  • Написана на языке С.
  • Может быть использована в программах на языке C++.
  • Может применяться в программах для микроконтроллеров
  • Не использует ни SIMD-инструкций, ни даже x64.
  • Использует очень мало памяти: 1 массив на 32 байта (компилятор кладет его в векторный регистр, если он есть) + несколько констант.
  • Поддерживает символы utf8 до 4х байт (стандарт RFC 3629)
  • Входной массив может совпадать с выходным: данные будут перезаписаны.

Применение:

Вам ничего не понадобится, кроме текста функции и 3х макросов перед ней. Ни инклюдов и библиотек, ни массивов, никакого другого кода. Просто скопируйте ее в свой проект.

ВНИМАНИЕ: Функция требует наличия 2х лишних выделенных байтов памяти за символом конца строки во входном массиве с символами utf8. В этих байтах может лежать любой мусор. Обычно, если в вашем проекте код написан оптимально, то вы не будете каждый раз выделять память под строку. Поэтому выделить 2 лишних байта - это не проблема. Но если в вашем проекте сложно это внедрить, то можете немного самостоятельно модифицировать код.

Если есть желание проверить работу функции, можно написать тест самостоятельно или воспользоваться заготовкой из main.c: https://github.com/0x1801/REPA/blob/main/main.c

Больше main.c ни для чего не нужен.

БОНУС: в файле https://github.com/0x1801/REPA/blob/main/koi8r_2_windows1251_AVX512.c можно найти функцию конвертации из любой 8-битной ASCII-совместимой кодировки в любую 8-битную ASCII-совместимую кодировку, написанную с использованием векторных инструкций AVX512. В коде для примера реализована конвертация из koi8r в windows 1251, но алгоритм пригоден для конвертации любоых сочетаний 8-битных кодировок, совместимых с ASCII. Признаюсь честно, что сам я ее тестировать поленился, т.к. msvc 2015 "из коробки" не знает функций, которые я использовал. Функция, как минимум, компилируется (в коментарии к ней ссылка на godbolt.org). Просто мне было интересно написать функцию, которая умеет конвертировать сразу 64 символа всего за 12 инструкций (само отображение занимает при этом вообще 2 инструкции). Если вам удастся протестировать функцию или найти в ней ошибки (или улучшения), напишите мне, пожалуйста.

Связаться с автором:

Илья

[email protected].

repa's People

Contributors

0x1801 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.