Начало работы в [закрытом] Программировании C

Я ставлю то, что нахожу в этом ответе, когда делаю успехи, основываясь на файлах edc_ecc.c web github. RSL12 - это GF (2 ^ 8), полином x ^ 8 + x ^ 4 + x ^ 3 + x ^ 2 + 1 => hex 11d. Все ненулевые числа в поле можно считать степенями шестнадцатеричного числа 02.

Полином P-генератора в шестнадцатеричном виде:

(x+01)(x+02)(x+04)(x+08) = 01 x^4 + 0f x^3 + 36 x^2 + 78 x + 40

Если вы посмотрите на 4 записи для AP [...] [31], вы увидите значения 75, 249, 78, 6, это десятичные записи в шестнадцатеричном формате 0f, 36, 78, 40. Обратите внимание, что AP должна быть AP [4] [28] (не [4] [32]), исправление показано ниже.

На основании вашего (теперь удаленного) комментария я «неинвертировал» Q в примерах, которые вы дали в исходном вопросе, и, используя мою собственную демонстрационную программу RS для вычисления P-четностей, теперь я получаю 00 00 00 00: [1111 ]

01 01 01 01 01 01 01 01 01 01 01 01 1a 91 b1 3a 01 01 01 01 01 01 01 01 01 01 01 01 00 00 00 00
a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 94 43 5a 8d a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 00 00 00 00

Полином Q-генератора такой же, как полином P-генератора. Он используется для RS (28,24), но байты четности находятся посередине, поэтому необходимо изменить традиционное кодирование, как объяснено ниже.

AQ [] [] неправильно, используя AQ [3] [], чтобы получить Q [3], я получаю 69 вместо 3a:

01 01 01 01 01 01 01 01 01 01 01 01 -- -- -- 69 01 01 01 01 01 01 01 01 01 01 01 01

Кроме того, только AQ [0] имеет 21 байт, AQ [1] имеет только 22 байта, AQ [2] имеет только 23 байта, AQ [3] имеет 24 байта, но они, по-видимому, неверны.

Существует обходной путь, используйте 4 декодирования стирания с местоположениями с 12 по 15, помеченными как стирания (xx xx xx xx), для выполнения кодирования Q:

01 01 01 01 01 01 01 01 01 01 01 01 xx xx xx xx 01 01 01 01 01 01 01 01 01 01 01 01
a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 xx xx xx xx a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5

После коррекции 4 стирания Q байты четности кодируются:

01 01 01 01 01 01 01 01 01 01 01 01 1a 91 b1 3a 01 01 01 01 01 01 01 01 01 01 01 01
a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 94 43 5a 8d a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5 a5

Используя метод декодирования с 4 стиранием, я сгенерировал фиксированный AQ [] []:

static const unsigned char AQ[4][24] =
  {{58,152,173,95,88,43,134,205,143,131,163,75,249,66,151,116,125,184,110,16,58,62,137,113},
   {30,214,148,138,112,154,157,96,49,198,189,249,69,47,147,235,156,47,209,183,138,232,205,120},
   {162,244,13,171,213,236,71,177,253,162,59,78,243,180,186,34,78,136,130,85,108,115,178,246},
   {158,179,101,94,49,140,211,149,137,169,81,6,72,157,122,131,190,116,22,64,68,143,119,22}};

Однако, если вы планируете написать декодер (что исправляет стирания и / или ошибки), тогда вы можете использовать тот же метод, который я использовал для декодирования 4 стираний вместо кодирования. Если я правильно помню, именно так некоторые ранние накопители DAT (цифровые аудиокассеты) реализовали это, поскольку у них также были свои байты четности в середине данных.


AP должна быть AP [4] [28]. P - RS (32,28), 28 байтов данных, используемых для генерации 4 байтов четностей. Первые 4 значения из каждой строки AP [...] [32] должны быть удалены, поэтому он становится AP [4] [28], а encode_L1_P () должен кодировать 28 байтов данных (как было отмечено в одной строке) ниже).

static const unsigned char AP[4][28] =
  {{249,142,180,197,5,155,153,132,143,244,101,76,102,155,203,104,58,152,173,95,88,43,134,205,143,131,163,75},
   {205,252,218,199,202,41,136,106,119,238,193,103,123,242,83,178,30,214,148,138,112,154,157,96,49,198,189,249},
   {67,11,131,40,7,41,80,147,151,17,245,253,208,66,228,116,162,244,13,171,213,236,71,177,253,162,59,78},
   {148,186,203,11,161,159,138,149,250,107,82,108,161,209,110,64,158,179,101,94,49,140,211,149,137,169,81,6}};

encode_L1_P () требуется одна фиксированная строка:

static int
encode_L1_P(inout)
    unsigned char inout[L1_RAW + L1_Q + L1_P];
{
    unsigned char *P;
    int i;

    P = inout + L1_RAW + L1_Q;

    memset(P, 0, L1_P);
    for (i = 0; i < L1_RAW + L1_Q; i++) {   /* fix (remove + L1_P) */
        unsigned char data;

        data = inout[i];
        if (data != 0) {
            unsigned char base = rs_l12_log[data];

            P[0] ^= rs_l12_alog[(base+AP[0][i]) % (unsigned)((1 << RS_L12_BITS)-1)];
            P[1] ^= rs_l12_alog[(base+AP[1][i]) % (unsigned)((1 << RS_L12_BITS)-1)];
            P[2] ^= rs_l12_alog[(base+AP[2][i]) % (unsigned)((1 << RS_L12_BITS)-1)];
            P[3] ^= rs_l12_alog[(base+AP[3][i]) % (unsigned)((1 << RS_L12_BITS)-1)];
        }
    }
    return (0);
}
9
задан 5 revs, 3 users 57% 23 May 2017 в 12:32
поделиться

10 ответов

Я отвечу на Ваши вопросы в порядке:

  • Какой компилятор я мог использовать и почему? - Обычно gcc на мире Unix, и так как Вы сказали, Вы не возражаете против Windows, последней версии MSVC (2008). хотя это не поддерживает C99. (Не забудьте изменять настройки проекта для компиляции как C.)
  • Что IDE я мог использовать и почему? - Я услышал хорошие вещи о Eclipse, но я никогда не добирался очень в него, так как я нахожусь в Windows, и gcc опции для Windows являются... не звездными. 2008 MSVC хорош, но Intellisense не вполне соответствует C#, хотя это не столь важно в C как в C++. Я услышал, что они фиксируют это на 2010.
  • Что другие инструменты полезны для программиста новичка C? - Поднимают Ваше предупреждение уровня к maximium, поддерживаемому компилятором. (К разумному стандарту.) Это поможет Вам поддержать хорошие методы кодирования.
  • Есть ли бесплатные онлайн руководства? - Да. Я не знаю ни о каких очень хороших все же. Получите 2-го Ed K&R. Это - потрясающая книга, и короткий также, создателями языка.

И другой совет: Попытайтесь придерживаться, и учиться, стандартный ANSI C сначала, избегать собственных расширений.

13
ответ дан 4 December 2019 в 07:24
поделиться

См. это сообщение stackoverflow для списка книг и ресурсов онлайн на программировании C, плюс, конечно, K&R. - который является на самом деле вполне хорошей книгой и милостиво короткий. Классик C на работе Win32 является Windows Программирования Petzold.

Править: На мое дополнение к сообщению tvanoffsson комплект MinGW хорош для консольных приложений. Кроме того, мой друг записал C программирование учебного руководства несколько лет назад, которое было довольно известно в то время и все еще открывается при случае.

4
ответ дан 4 December 2019 в 07:24
поделиться

Вы могли бы попытаться использовать Выпуск C++ Visual Studio Express. Можно легко написать код C и скомпилировать его с компилятором C++. Я купил бы копию K & R C и работал бы через нее.

Править: Как альтернатива Visual Studio, Вы могли посмотреть на MinGW. Это - система разработки Win32 на основе GCC. Основное требование известности этого по Visual Studio состоит в том, что центральные Unix ресурсы C будут работать лучше над этим, чем на Win32, поскольку это имеет порты или клоны многих основных библиотек Unix, которые могут или не могут быть доступными с Visual Studio или не могут быть полностью совместимыми без некоторой работы портирования.

7
ответ дан 4 December 2019 в 07:24
поделиться

После K&R (иначе Библия в моем классе CS), я рекомендовал бы эту книгу: текст ссылки Это покрывает некоторые хитрые части C и очень хорошо записано. И Вы даже получаете сертификат о завершении. Как мог Вы побеждать это!

1
ответ дан 4 December 2019 в 07:24
поделиться

Я запустил бы MinGW (или Cygwin) в Windows, или просто Gcc на *отклоняют. ЕСЛИ Вы хотите изучить программирование C, и IDE экранирует Вас от важного процесса компиляции.

Изучение языка как C похоже на любой язык. Запустите с некоторых простых "Привет, Мировые" программы и поймите их. Перейдите на что-то маленькое, которого Вы должны достигнуть. Вы будете бегло говорить на базовом языке в мгновение ока; это является довольно маленьким и существует только несколько вещей, о которых необходимо действительно знать, поскольку Вы начинаете (указатель <=>, дуальность массива - одна).

Поймите предварительную обработку, компиляцию и соединение фаз разработки также. Для привет мира это столь же просто как

gcc hello_world.c

Но в любой большой программе Вы сделаете отдельные фазы компиляции/ссылки. IDE как MSVC обработает это для Вас, но все еще необходимо знать о нем.

Любой ценой найдите хороший IDE с хорошим синтаксисом hilighting, но начните только использовать функции редактора некоторое время.

2
ответ дан 4 December 2019 в 07:24
поделиться
  • Какой компилятор я мог использовать и почему?

Я должен согласиться, что создание и запущение программ вручную сначала (без справки IDE) будут полезно, даже если это будет только для Ваших первых нескольких небольших программ. Как упомянуто выше GCC является очень стандартным.

  • Что IDE я мог использовать и почему?

Я начал использовать DevC ++ (это просто в использовании). Затем в зависимости от Вашего направления Вы затем захотите выбрать более сложный IDE (такой как Visual Studio).

  • Что другие инструменты полезны для программиста новичка C?

Отладчик Вашего IDE! Вместо того, чтобы поместить "printf" операторы везде (как многие начинающие c-программисты делают) изучают, как использовать отладчик Вашего IDE. Это сэкономит Вам довольно мало времени в конечном счете :)

  • Есть ли бесплатные онлайн руководства?

Тонны. Быстрый поиск Google "c программирование" возвратит значительные суммы. Но, если Вы действительно хотите погружение в, я рекомендую искать общий C Программирование префиксов курса колледжа (таких как COP3223). Если Вы шпионите вокруг немного, с которым Вы сможете найти некоторые большие примечания лекции, которые будут очень выгодны!

2
ответ дан 4 December 2019 в 07:24
поделиться

MicroSofts Visual Studio Express (Теперь часть некоторого пакета .NET) является превосходным набором инструментов IDE/компилятора и более или менее свободный к dowload!

Я также рекомендовал бы Kernigen и Ritchies "Язык программирования C" категорическая книга по C перед C++, и, одна из лучших частей технической записи когда-либо.

Избегайте Bjarne Soustrups книга "C++", это - очень трудное чтение и больше о том, как/почему определить синтаксис программирования, чем, как использовать язык.

0
ответ дан 4 December 2019 в 07:24
поделиться

Единственная проблема с использованием компилятора C++ является этим, не является прямым C, но я предложил бы узнать, что C++ является просто пользой для изучения как C. Я предложил бы изучить C++ независимо от того, что Joel говорит...., так как он, вероятно, думает о них как о том же. Указатели, указатели, указатели....

Я предложил бы эту книгу C, если Вы изгибаетесь на прямом C.

0
ответ дан 4 December 2019 в 07:24
поделиться

Опция, с которой Вы собираетесь хотеть пойти для компилятора, является gcc, если Вы будете работать с K&R C (который Вы должны). Можно сделать это через Cygwin, который также поможет Вам повторить на Ваших навыках Unix, если у Вас уже не будет базового уровня знакомства с *, отклоняют.

Для новичка IDE является определенно излишеством здесь. Поэтому я предложил бы учиться работать с vi, emacs, pico, или joe. Все доступны с Cygwin также, и какой, который Вы выбираете, должен быть вопросом персонального предпочтения. Каждый идет с его собственной кривой обучения. Позже, можно найти предпочтение одного из этих редакторов к Visual Studio (или любой другой IDE в этом отношении.)

Это - хорошее осуществление, чтобы учиться делать все это без IDE сначала.

В конце, однако, самая важная вещь не состоит в том, что Вы волнуетесь о платформе, но просто что Вы берете инструменты и начинаете использовать их. Нет никакого другого способа учиться.

0
ответ дан 4 December 2019 в 07:24
поделиться

What compiler could I use and why?

GCC, because it's universal: you can run it on Windows, OS X, Linux, Solaris, Haiku, anything you mention, and on any kind of CPU (i.e. architecture), and for any kind of CPU. Your compiler-specific skills are never obsolete with GCC.

For windows, that'd be MinGW.

What IDE could I use and why?

Emacs. Press tab once, emacs automatically indents the right way. Moving through text is done effortlessly with Ctrl-letter and Alt-letter, instead of by moving your hand all the way over to the arrow keys or page up/down (although you do have that option). Yeah, it sounds weird, but it's a boon once you get the hang of it. The colors are pretty to look at and easy to read (unlike vim's dark-blue-on-black comments).

You may like ecb-minor-mode, which works well with window-numbering. Also, there's a great IRC channel, #emacs, on irc.freenode.net.

What other tools are useful for a beginner C programmer?

A debugger. Note that gdb takes a little while to learn, but is quite nice.

Also: Valgrind. Very useful for checking your program for errors regarding dynamically allocated memory. Also very useful for finding threading bugs (if you need that).

Are there free online guides?

They come and change and go. I punt this one and let Google give the answer.

1
ответ дан 4 December 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: