Поскольку код JS запускается в браузере пользователя, а Java запускается на вашем сервере, единственный способ передать данные из Javascript в Java - выполнить Ajax-вызов. На вашем сервере вам нужна конечная точка API, которая принимает запросы, а затем после получения нужных данных вы можете обрабатывать их в своей Java-программе.
Проверьте:
Надеюсь, это поможет!
код, поддерживающий произвольные байтовые заказы, готовые к тому, чтобы быть введенным в файл order order32.h
:
#ifndef ORDER32_H
#define ORDER32_H
#include <limits.h>
#include <stdint.h>
#if CHAR_BIT != 8
#error "unsupported char size"
#endif
enum
{
O32_LITTLE_ENDIAN = 0x03020100ul,
O32_BIG_ENDIAN = 0x00010203ul,
O32_PDP_ENDIAN = 0x01000302ul, /* DEC PDP-11 (aka ENDIAN_LITTLE_WORD) */
O32_HONEYWELL_ENDIAN = 0x02030001ul /* Honeywell 316 (aka ENDIAN_BIG_WORD) */
};
static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order =
{ { 0, 1, 2, 3 } };
#define O32_HOST_ORDER (o32_host_order.value)
#endif
Вы бы проверили на небольшие эндин системы через
O32_HOST_ORDER == O32_LITTLE_ENDIAN
При дампе препроцессора #defines
gcc -dM -E - < /dev/null
g++ -dM -E -x c++ - < /dev/null
, можно обычно находить материал, который поможет Вам. С логикой времени компиляции.
#define __LITTLE_ENDIAN__ 1
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
Различные компиляторы могут иметь отличающийся, определяет как бы то ни было.
Инъекция зависимости иногда может быть использовано.
-121--3843866-Если у вас есть компилятор, который поддерживает C99 сложных литералов:
#define IS_BIG_ENDIAN (!*(unsigned char *)&(uint16_t){1})
или:
#define IS_BIG_ENDIAN (!(union { uint16_t u16; unsigned char c; }){ .u16 = 1 }.c)
в целом, вы должны попытаться написать код, который не зависит от целевой части платформы хоста. Отказ
Пример независимой в хост-цене, независимо от участия NTOHL ()
:
uint32_t ntohl(uint32_t n)
{
unsigned char *np = (unsigned char *)&n;
return ((uint32_t)np[0] << 24) |
((uint32_t)np[1] << 16) |
((uint32_t)np[2] << 8) |
(uint32_t)np[3];
}
Используйте встроенную функцию, а не макрос. Кроме того, вам нужно хранить что-то в памяти, которое является не очень красивым побочным эффектом макроса.
Вы можете преобразовать его в короткий макрос, используя статическую или глобальную переменную, как это:
static int s_endianess = 0;
#define ENDIANESS() ((s_endianess = 1), (*(unsigned char*) &s_endianess) == 0)
Нет стандарта, а на многих системах, включая
даст вам некоторые определять, чтобы искать.
В то время как нет портативного #define или что-то для того, чтобы полагаться, платформы предоставляют стандартные функции для преобразования в и с вашего «Host» Endian.
Вообще, вы делаете хранилище - на диск или сеть - используя «сеть Endian», что является большим Endian, а локальные вычисления с использованием хоста Endian (что на X86 мало Endian). Вы используете htons ()
и ntohs ()
и друзья для преобразования между двумя.
Попробуйте это:
#include<stdio.h>
int x=1;
#define TEST (*(char*)&(x)==1)?printf("little endian"):printf("Big endian")
int main()
{
TEST;
}
Если вы хотите полагаться только на препроцессоре, вы должны выяснить список предопределенных символов. Препроцессорная арифметика не имеет концепции адресации.
GCC на Mac определяет __ Mitele_endian __
или __ Big_endian __
$ gcc -E -dM - < /dev/null |grep ENDIAN
#define __LITTLE_ENDIAN__ 1
Тогда вы можете добавить больше предварительно исправительных условных директив на основе обнаружения платформы, такими как #ifdef _win32
и т. Д.
Чтобы обнаружить эндианцу во время выполнения, вы должны иметь возможность обратиться к памяти. Если вы придерживаетесь стандартного C, декларирование переменной в памяти требуется оператор, но возвращение значения требует выражения. Я не знаю, как это сделать в одном макросе - вот почему GCC имеет расширения: -)
Если вы готовы иметь файл .h, вы можете определить
static uint32_t endianness = 0xdeadbeef;
enum endianness { BIG, LITTLE };
#define ENDIANNESS ( *(const char *)&endianness == 0xef ? LITTLE \
: *(const char *)&endianness == 0xde ? BIG \
: assert(0))
, а затем вы можете использовать Эндианс
Макрос, как вы.