В общем, это выглядит очень неправильно и подняло некоторые красные флажки для меня, но вы можете быть в порядке.
Использование типов Java помогает. Если вы выполняете приведение к int
, у вас могут возникнуть проблемы на некоторых машинах, поскольку ints
может быть 32-разрядным или 64-разрядным. Используя jint
, он всегда должен быть 32-битным, поэтому в этом отношении вы в безопасности.
Мне все еще не совсем понятно, что вы пытаетесь сделать. Например, эта строка:
*(1 + (jint * ) &p) = tmp;
То, что вы говорите, это взять адрес p (двойной), обработать его как целочисленный адрес Java, а затем добавить его к нему. Это означало бы взять местоположение двойного и посмотреть 4 байта в нем ... поместить вас куда-то в дробную часть IEEE-кодированного двойного .
Затем вы устанавливаете это местоположение в значение tmp ..., которое является целым числом, а не IEEE-кодированием.
Если вы не делаете что-то невероятно умное , непосредственно манипулируя битами двойника, то, что вы делаете, приведет к бессмысленным результатам.