Как мне преобразовать двоичную строку в число в Perl?

Я думаю, что лучше всегда использовать ApplicationContext, если вы не находитесь в мобильной среде, как кто-то еще сказал. ApplicationContext имеет больше функциональности, и вы определенно хотите использовать PostProcessors, такие как RequiredAnnotationBeanPostProcessor, AutowiredAnnotationBeanPostProcessor и CommonAnnotationBeanPostProcessor, которые помогут вам упростить ваши файлы конфигурации Spring, и вы можете использовать аннотации, такие как @Required, @PostConstruct, @Resource и т. Д. В ваших компонентах .

Даже если вы не используете все, что предлагает ApplicationContext, лучше использовать его в любом случае, а затем, если вы решите использовать некоторые ресурсы, такие как сообщения или пост-процессоры, или другую схему для добавления транзакционных советов и т. д. у вас уже будет ApplicationContext, и вам не нужно будет изменять какой-либо код.

Если вы пишете автономное приложение, загрузите ApplicationContext в свой основной метод, используя ClassPathXmlApplicationContext , и получите главный компонент и вызовите его run () (или любой другой метод), чтобы запустить приложение. Если вы пишете веб-приложение, используйте ContextLoaderListener в web.xml, чтобы он создавал ApplicationContext, и позже вы можете получить его из ServletContext, независимо от того, используете ли вы JSP, JSF, JSTL, struts, Tapestry и т. Д. .

Кроме того, помните, что вы можете использовать несколько конфигурационных файлов Spring, и вы можете либо создать ApplicationContext, указав все файлы в конструкторе (или указав их в контексте-param для ContextLoaderListener), либо вы можете просто загрузите основной файл конфигурации с инструкциями импорта. Вы можете импортировать файл конфигурации Spring в другой файл конфигурации Spring, используя & lt; import resource = "otherfile.xml" / & gt; что очень полезно при программном создании ApplicationContext в основном методе и загрузке только одного конфигурационного файла Spring.

29
задан Nathan Fellman 27 January 2009 в 14:43
поделиться

5 ответов

sub bin2dec {
    return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
24
ответ дан Tim Cooper 27 January 2009 в 14:43
поделиться

Как обычно, здесь также есть отличный модуль CPAN: Bit :: Vector .

Преобразование будет выглядеть примерно так:

use Bit::Vector;

my $v = Bit::Vector->new_Bin( 32, '0001001100101' );
print "hex: ", $v->to_Hex(), "\n";
print "dec: ", $v->to_Dec(), "\n";

Бинарные строки могут быть практически любой длины, и вы можете делать другие полезные вещи, такие как сдвиг битов и т. Д.

12
ответ дан innaM 27 January 2009 в 14:43
поделиться

Мой предпочтительный способ:

$x_num = oct("0b" . $x_bin);

Цитата из man perlfunc:

    oct EXPR
    oct     Interprets EXPR as an octal string and returns the
            corresponding value. (If EXPR happens to start
            off with "0x", interprets it as a hex string. If
            EXPR starts off with "0b", it is interpreted as a
            binary string. Leading whitespace is ignored in
            all three cases.)
57
ответ дан Peter Mortensen 27 January 2009 в 14:43
поделиться

На самом деле вы можете просто вставить '0b' на передней панели, и это будет рассматриваться как двоичное число.

perl -le 'print 0b101'
5

Но это работает только для голого слова.

6
ответ дан noswonky 27 January 2009 в 14:43
поделиться

Вы можете использовать метод eval(), чтобы обойти ограничение голого слова:

eval "\$num=0b$str;";
0
ответ дан Michael 27 January 2009 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: