Вы можете использовать битсет
bitset<8> b(string("00010000"));
int i = (int)(bs.to_ulong());
cout<<i;
Большое спасибо, Брэндон, это очень полезно, и я наконец-то получаю правильное значение! Фактически, кажется, что равноденствия определяются тем, что прямое восхождение равно 0, 6, 12, 18, а не гелиоцентрической долготе, равной 0, 90, 180, 270. Существует небольшая разница между ra и hlon, когда Вы запускаете код ниже. Но это приводит к другому вопросу. На странице Википедии https://en.wikipedia.org/wiki/Equinox говорится, что равноденствия определяются долготой 0 или 180. Так кто же прав?
import ephem
sun = ephem.Sun()
d1 = ephem.Date('2019/03/15')
d2 = ephem.Date('2019/03/25')
a=ephem.degrees('0.0') # or 90, or 180, or 270
def spring_equinox(date):
sun.compute(date)
return ephem.degrees(sun.ra - a).znorm
d = ephem.newton(spring_equinox, d1, d2)
print(ephem.Date(d))
print sun.ra
print sun.hlon
Похоже, разница в том, что базовая астрономическая библиотека PyEphem всегда измеряет гелиоцентрическую долготу относительно координат J2000, которая к дате, о которой вы спрашиваете, заметно отличается от координат даты, которые используются для определения равноденствия .
Попробуйте выполнить это в качестве шага вычисления:
sun.compute(d3, epoch=d3)
и затем найдите, когда sun.ra
равен нулю; результат должен быть равноденствием. Я посмотрю, как обновить Справочник PyEphem, чтобы заметить, что гелиоцентрические координаты, похоже, не обращают внимания на параметр epoch=
.