Как преобразовать uint16_t в char * с ведущими нулями [duplicate]

Ваш Javascript будет выполняться на клиенте, а не на сервере. Это означает, что foo не оценивается на стороне сервера, и поэтому его значение не может быть записано в файл на сервере.

Лучший способ подумать об этом процессе - это как будто вы генерируя текстовый файл динамически. Текст, который вы генерируете, становится исполняемым кодом после того, как браузер интерпретирует его. Только то, что вы размещаете между тегами <?php, оценивается на сервере.

Кстати, создание привычки встраивать случайные фрагменты PHP-логики в HTML или Javascript может привести к серьезному запутанному коду. Я говорю от болезненного опыта.

266
задан zxcv 30 September 2008 в 17:34
поделиться

10 ответов

printf("%05d", zipCode);

471
ответ дан Tim Cooper 26 August 2018 в 19:31
поделиться
  • 1
    Пожалуйста, не храните zipcodes как цифры. Некоторые страны имеют буквы в своем почтовом индексе. – Sec 30 September 2008 в 17:57
  • 2
    Для вашего случая этого было бы достаточно. Как можно иметь ведущие нули в целой части неизвестной длины? – daumie 10 May 2018 в 14:58

Вы устанавливаете ноль перед минимальной шириной поля:

printf("%05d",zipcode);
42
ответ дан Adam Bellaire 26 August 2018 в 19:31
поделиться

Если вам нужно сохранить zipcode в zipcode символьного массива [], вы можете использовать это:

snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
0
ответ дан dev.mi 26 August 2018 в 19:31
поделиться

Zipcode - это сильно локализованное поле, во многих странах есть символы в своих почтовых индексах, например, в Великобритании, Канаде. Поэтому в этом примере вы должны использовать поле string / varchar для его сохранения, если в любой момент вы будете отправлять или получать пользователей / клиентов / клиентов / etc из других стран.

Однако в общем случае вам следует используйте рекомендуемый ответ (printf("%05d", number);).

16
ответ дан JeeBee 26 August 2018 в 19:31
поделиться

Если вы находитесь на машине * NIX:

man 3 printf

Это покажет страницу руководства, аналогичную:

0 Значение должно быть заполнено нулями. Для преобразований d, i, o, u, x, X, a, A, e, E, f, F, g и G преобразованное значение дополняется слева нулями, а не пробелами. Если появляются 0 и - флаги, флаг 0 игнорируется. Если точность задана с числовым преобразованием (d, i, o, u, x и X), флаг 0 игнорируется. Для других преобразований поведение не определено.

Даже если вопрос касается C, , эта страница может быть полезной.

14
ответ дан Kaiden Prince 26 August 2018 в 19:31
поделиться
  • 1
    почему нужно 3 номера? – Elric 25 February 2018 в 15:47
  • 2
    @Elric Если вы даете числовой аргумент команде man, он сужает ее до этого конкретного раздела. Без него вы получите справочную страницу для команды оболочки printf вместо функции C. – Paul Tomblin 25 February 2018 в 17:51

Правильное решение - хранить почтовый индекс в базе данных как STRING. Несмотря на то, что он может выглядеть как число, это не так. Это код, где каждая часть имеет смысл.

Число - это то, на что вы делаете арифметику. Почтовый индекс не тот.

145
ответ дан Martin Tournoij 26 August 2018 в 19:31
поделиться
  • 1
    Ya. Ваше наблюдение абсолютно верно. Это то, что я делаю. Однако человек, задающий вопрос, вероятно, пытается справиться с домашней работой, а не с производственным кодом. Ответ должен быть адаптирован к человеку, задающему вопрос. – EvilTeach 30 September 2008 в 18:32
  • 2
    Полагаю, мне следовало бы перефразировать его более точно, чтобы проиллюстрировать, что я смотрел, как я могу делать ведущие и завершающие символы на языке, с которым я не знаком. Я буду более осторожен с произвольными примерами в будущем! – zxcv 1 October 2008 в 00:31
  • 3
    Другие страны, такие как U.K., имеют буквы в почтовых индексах – jjxtra 6 September 2016 в 21:21

Вы сохраните себе кучу неприятностей (долгосрочный), если вы сохраните почтовый индекс как строку символов, а не число, которое оно не является.

3
ответ дан pro3carp3 26 August 2018 в 19:31
поделиться

Более гибкий. Вот пример, печатающий строки правых чисел с фиксированной шириной и пробел.

//---- Header
std::string getFmt ( int wid, long val )
{  
  char buf[64];
  sprintf ( buf, "% *ld", wid, val );
  return buf;
}
#define FMT (getFmt(8,x).c_str())

//---- Put to use
printf ( "      COUNT     USED     FREE\n" );
printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );

//-------- Output
      COUNT     USED     FREE
A:      354   148523     3283
B: 54138259 12392759   200391
C:    91239     3281    61423

Функция и макрос сконструированы таким образом, что printfs более читабельны.

0
ответ дан rch 26 August 2018 в 19:31
поделиться
  • 1
    Я не уверен на 100% вашего намерения с макросом, но похоже, что вы хотели определить функцию, например #define FMT(x) (getFmt(8,x).c_str()) (обратите внимание на параметр x !), В отличие от переменной ( что и делает ваш код). – Ponkadoodle 2 August 2014 в 04:47

printf допускает различные варианты форматирования.

ex:

printf("leading zeros %05d", 123);
7
ответ дан Trent 26 August 2018 в 19:31
поделиться
sprintf(mystring, "%05d", myInt);

Здесь «05» говорит «используйте 5 цифр с ведущими нулями».

13
ответ дан Unihedron 26 August 2018 в 19:31
поделиться
Другие вопросы по тегам:

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