Làm cách nào để chuyển đổi chuỗi nhị phân $x_bin="0001001100101"
thành giá trị số $x_num=613
trong Perl?Làm cách nào để chuyển đổi chuỗi nhị phân thành một số trong Perl?
Trả lời
sub bin2dec {
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
cách ưa thích của tôi là:
$x_num = oct("0b" . $x_bin);
Trích dẫn từ 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.)
Đó là ... gây sốc. Cảm ơn bạn. – innaM
@edg: đó là dự kiến trên nền tảng 32 bit; làm việc cho tôi với 64 bit, mặc dù với một cảnh báo di động. – ysth
Tôi luôn luôn sử dụng gói, nhưng tôi chỉ chuẩn gói, oct, và Bit :: Vector và điều này là bởi đến nay là nhanh nhất trong ba. Tốc độ nhanh hơn Bit :: Vector nhanh hơn 14% và nhanh hơn 316% so với gói trên hệ thống của tôi. – gpojd
Như thường lệ, cũng là một module CPAN xuất sắc nên được đề cập ở đây: Bit::Vector .
Việc chuyển đổi sẽ giống như thế này:
use Bit::Vector;
my $v = Bit::Vector->new_Bin(32, '0001001100101');
print "hex: ", $v->to_Hex(), "\n";
print "dec: ", $v->to_Dec(), "\n";
Các chuỗi nhị phân có thể được gần như bất kỳ chiều dài và bạn có thể làm những thứ gọn gàng khác như bit chuyển vv
Trên thực tế bạn có thể chỉ dính '0b' ở mặt trước và nó được coi là số nhị phân.
perl -le 'print 0b101'
5
Nhưng điều này chỉ hoạt động đối với người gác.
Bạn có thể sử dụng phương pháp eval()
để làm việc xung quanh những hạn chế trần từ:
eval "\$num=0b$str;";
- 1. Làm thế nào để chuyển đổi một chuỗi hoặc số nguyên thành nhị phân trong Ruby?
- 2. Làm thế nào để bạn chuyển đổi một chuỗi thành ascii thành nhị phân trong C#?
- 3. Cách nhanh nhất để chuyển đổi chuỗi thành nhị phân?
- 4. Chuyển đổi một byte thành chuỗi nhị phân trong C#
- 5. SQL Server Chuyển đổi số nguyên thành chuỗi nhị phân
- 6. Chuyển đổi số thập phân thành nhị phân trong R?
- 7. Chuyển đổi chuỗi nhị phân thành số nguyên
- 8. Làm cách nào để chuyển đổi chuỗi thành một số trong Perl?
- 9. Làm thế nào để chuyển đổi một chuỗi nhị phân thành một giá trị float?
- 10. Làm thế nào để chuyển đổi 'chuỗi nhị phân' thành chuỗi bình thường trong Python3?
- 11. Chuyển đổi chuỗi thập lục phân thành chuỗi nhị phân
- 12. Chuyển đổi chuỗi nhị phân thành bigint trong MySQL?
- 13. Làm cách nào để chuyển đổi số nhị phân thành BigInteger trong Java?
- 14. Chuyển đổi số thập lục phân thành chuỗi thành số âm, trong Perl
- 15. Làm thế nào để chuyển đổi một chuỗi nhị phân thành số nguyên cơ bản 10 trong Java
- 16. Chuyển đổi chuỗi nhị phân thành mảng byte
- 17. Chuyển đổi một chuỗi nhị phân lớn để Hexadecimal
- 18. Cách chuyển đổi một chuỗi số thành số (thập phân) và số thành chuỗi
- 19. SQL Cách chuyển đổi một số thập phân thành chuỗi
- 20. Chuỗi nhị phân thành số nguyên
- 21. Chuyển đổi chuỗi thập lục phân (hex) thành một chuỗi nhị phân
- 22. Trong python, làm thế nào để chuyển đổi một chuỗi ascii hex thành chuỗi nhị phân nội bộ thô?
- 23. Làm thế nào để chuyển đổi NSInteger thành giá trị nhị phân (chuỗi)
- 24. Chuyển đổi tệp nhị phân thành chuỗi Base64
- 25. Chuyển đổi chuỗi số không nhị phân và những
- 26. java: chuyển đổi chuỗi nhị phân thành int
- 27. Chuyển đổi chuỗi đại diện của số nhị phân thành int trong C#
- 28. Làm thế nào để chuyển đổi một chuỗi được mã hóa hex thành chuỗi byte trong Perl?
- 29. Làm cách nào để chuyển đổi một số thành văn bản trong Perl?
- 30. Chuyển đổi chuỗi nhị phân thành danh sách các số nguyên bằng cách sử dụng Python
Mỗi công cụ tôi hỏi nói với tôi rằng 111111111111111111111111111111111 dịch để 8589934591. Chỉ cần như thế nào chắc chắn là bạn rằng 42949672958589934591 là đúng? – innaM
Điều này được thực hiện bởi oct() được xây dựng sẵn, mặc dù nó là một tên khá nghèo cho nó. –