Взгляните на:
String.fromCharCode(64)
и
String.charCodeAt(0)
первое нужно назвать на Строке класс (буквально String.fromCharCode...
) и возвратится (для 64). Второе должно быть выполнено на Строке экземпляр (например, "@@@".charCodeAt...
) и возвращается, код Unicode первого символа (эти '0' положение в строке, можно получить коды для других символов в строке путем изменения этого на другое число).
отрывок сценария:
document.write("Unicode for character ਔ is: " + "ਔ".charCodeAt(0) + "<br />");
document.write("Character 2580 is " + String.fromCharCode(2580) + "<br />");
дает:
Unicode for character ਔ is: 2580 Character 2580 is ਔ
К сожалению, не существует кроссплатформенного макроса, который определял бы 32/64-разрядность в основных компиляторах. Я нашел наиболее эффективный способ сделать это следующим образом.
Сначала я выбираю собственное представление. Я предпочитаю ENVIRONMENT64 / ENVIRONMENT32. Затем я выясняю, что используют все основные компиляторы для определения 64-битной среды или нет, и использую это для установки своих переменных.
// Check windows
#if _WIN32 || _WIN64
#if _WIN64
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif
// Check GCC
#if __GNUC__
#if __x86_64__ || __ppc64__
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif
Другой более простой способ - просто установить эти переменные из командной строки компилятора.
Если вы можете использовать конфигурации проекта во всех ваших средах, это упростит определение 64- и 32-битных символов. Таким образом, у вас будут такие конфигурации проекта:
32-разрядная отладка
32-разрядная версия
64-разрядная отладка
64-разрядная версия
РЕДАКТИРОВАТЬ: Это общие конфигурации, а не целевые конфигурации. Называйте их как хотите.
Если вы не можете этого сделать, мне нравится идея Джареда.
"Скомпилировано в 64 bit "плохо определен в C ++.
C ++ устанавливает только нижние пределы для размеров, таких как int, long и void *
. Нет гарантии, что int будет 64-битным, даже если он скомпилирован для 64-битной платформы. Модель допускает, например, 23-битные int
s и sizeof (int *)! = sizeof (char *)
Существуют различные модели программирования для 64-битных платформ.
Лучше всего тестировать платформу. Ваше второе лучшее переносимое решение должно быть более конкретным в , что является 64-битным.
Для начала это не сработает в Windows. Longs и int являются 32-битными независимо от того, компилируете ли вы для 32-битных или 64-битных окон. Я бы подумал, что проверка, составляет ли размер указателя 8 байт, вероятно, более надежный путь.
Вы должны иметь возможность использовать макросы, определенные в stdint. ч
. В частности, INTPTR_MAX
- это именно то значение, которое вам нужно.
#include <cstdint>
#if INTPTR_MAX == INT32_MAX
#define THIS_IS_32_BIT_ENVIRONMENT
#elif INTPTR_MAX == INT64_MAX
#define THIS_IS_64_BIT_ENVIRONMENT
#else
#error "Environment not 32 or 64-bit."
#endif
Некоторые (все?) Версии компилятора Microsoft не поставляются с stdint.h
. Не знаю почему, поскольку это стандартный файл. Вот версия, которую вы можете использовать: http://msinttypes.googlecode.com/svn/trunk/stdint.h
template<int> void DoMyOperationHelper();
template<> void DoMyOperationHelper<4>()
{
// do 32-bits operations
}
template<> void DoMyOperationHelper<8>()
{
// do 64-bits operations
}
// helper function just to hide clumsy syntax
inline void DoMyOperation() { DoMyOperationHelper<sizeof(size_t)>(); }
int main()
{
// appropriate function will be selected at compile time
DoMyOperation();
return 0;
}
Я бы поместил 32-битные и 64-битные исходные коды в разные файлы, а затем выбрал соответствующие исходные файлы с помощью системы сборки.