Новый современный способ сделать это - использовать toLocaleDateString
, поскольку он не только позволяет форматировать дату с правильной локализацией, вы даже можете передавать параметры форматирования для архивирования желаемого результата:
var date = new Date(2018, 2, 1);
var result = date.toLocaleDateString("en-GB", { // you can skip the first argument
year: "numeric",
month: "2-digit",
day: "2-digit",
});
console.log(result);
Когда вы пропустите первый аргумент, он обнаружит язык браузера. Кроме того, вы также можете использовать 2-digit
в опции года
.
Если вам не нужно поддерживать старые браузеры, такие как IE10, это самый чистый способ сделать эту работу. IE10 и более низкие версии не будут понимать аргумент параметров.
Произвольные блоки памяти могут быть выделены с помощью оператора new
в C ++; не с оператором new
, который предназначен для создания объектов.
void* pBlock = ::operator new(7);
Такие блоки впоследствии могут быть освобождены с помощью оператора delete
.
::operator delete(pBlock);
Обратите внимание, что оператор new
будет выделенная память соответствующим образом выровнена для любого типа объекта, поэтому реализация может не выделять ровно семь байтов и не более, но то же самое (обычно) верно для malloc
. Клиенты C malloc
обычно также нуждаются в выровненной памяти.
Вы не можете выделить указатель void
с помощью оператора C ++ new
: вам придется выделить явный тип, такой как char
или uint8_t
:
char *p = new char[7];
uint8_t *q = new uint8_t[7];
...
delete [] p;
delete [] q;
Да, можно.
Но в зависимости от того, что вы делаете, могут быть лучшие методы.
Не могли бы вы обновить вопрос и рассказать нам, чего вы пытаетесь достичь. С большим контекстом может быть предоставлено лучшее решение.
Пример:
Если вы динамически выделяли буфер для чтения из сокета (поскольку размер неизвестен во время компиляции). Альтернативой было бы использование вектора и его динамическое изменение размера. Затем вы можете получить указатель на внутреннюю часть буфера, взяв адрес первого элемента.
Другие ответили на вопрос, как написано, но я хотел бы предложить придерживаться malloc / free для такого выделения.
new и delete предназначены для размещения объектов. Они выделяют необходимую память и вызывают конструкторы / деструкторы. Если вы знаете, что вам просто нужен произвольный блок памяти, использование malloc и free вполне разумно.
new char [7];
Традиционно char - это байт, хотя вы можете найти некоторые библиотеки, которые определяют тип BYTE.
Вы можете использовать char * pBuffer = new char [7];
, а поскольку sizeof (char) составляет 1 байт, вы можете использовать его как байтовый буфер. Также не забудьте использовать delete []
(с []) при освобождении памяти.
Лично я бы использовал std :: vector
. Вы не только получаете произвольный блок байтов ( гарантированно непрерывный ), но и получаете их в оболочке RAII. Конечно, нет необходимости использовать какие-либо методы std :: vector
(кроме, возможно,