diff --git a/scapy/asn1/asn1.py b/scapy/asn1/asn1.py
index 1611d355102ef5131c23aef2a9033e2d507141e9..624a5e32434de8a6cba2cbea8778267370b0392e 100644
--- a/scapy/asn1/asn1.py
+++ b/scapy/asn1/asn1.py
@@ -11,9 +11,9 @@ ASN.1 (Abstract Syntax Notation One)
 import random
 from datetime import datetime
 from scapy.config import conf
-from scapy.error import Scapy_Exception,warning
+from scapy.error import Scapy_Exception, warning
 from scapy.volatile import RandField
-from scapy.utils import Enum_metaclass, EnumElement
+from scapy.utils import Enum_metaclass, EnumElement, binrepr
 
 class RandASN1Object(RandField):
     def __init__(self, objlist=None):
@@ -263,7 +263,7 @@ class ASN1_BIT_STRING(ASN1_Object):
     def __init__(self, val, readable=False):
         if readable:
             self.val_readable = val
-            val = "".join(bin(ord(x))[2:].zfill(8) for x in val)
+            val = "".join(binrepr(ord(x)).zfill(8) for x in val)
             self.unused_bits = 0
         else:
             if len(val) % 8 == 0:
diff --git a/scapy/asn1/ber.py b/scapy/asn1/ber.py
index ba431b4c530b49623f1a67e7a207fa932bb6c3e0..499cda61fe43bc2b59600413de70741bfe0cf51f 100644
--- a/scapy/asn1/ber.py
+++ b/scapy/asn1/ber.py
@@ -10,7 +10,7 @@ Basic Encoding Rules (BER) for ASN.1
 """
 
 from scapy.error import warning
-from scapy.utils import inet_aton,inet_ntoa
+from scapy.utils import binrepr,inet_aton,inet_ntoa
 from asn1 import ASN1_Decoding_Error,ASN1_Encoding_Error,ASN1_BadTag_Decoding_Error,ASN1_Codecs,ASN1_Class_UNIVERSAL,ASN1_Error,ASN1_DECODING_ERROR,ASN1_BADTAG
 
 ##################
@@ -277,7 +277,7 @@ class BERcodec_BIT_STRING(BERcodec_Object):
             unused_bits = ord(s[0])
             if safe and unused_bits > 7:
                 raise BER_Decoding_Error("BERcodec_BIT_STRING: too many unused_bits advertised", remaining=s)
-            s = "".join(bin(ord(x))[2:].zfill(8) for x in s[1:])
+            s = "".join(binrepr(ord(x)).zfill(8) for x in s[1:])
             if unused_bits > 0:
                 s = s[:-unused_bits]
             return cls.tag.asn1_object(s),t
diff --git a/scapy/asn1fields.py b/scapy/asn1fields.py
index 5cbaabd35953535c2f591a92314bf9a787897918..aed6087e8e942bef5edd742559ee003f239365c6 100644
--- a/scapy/asn1fields.py
+++ b/scapy/asn1fields.py
@@ -13,6 +13,7 @@ from asn1.ber import *
 from asn1.mib import *
 from volatile import *
 from base_classes import BasePacket
+from utils import binrepr
 
 FLEXIBLE_TAGS = False
 
@@ -199,7 +200,7 @@ class ASN1F_BIT_STRING(ASN1F_field):
     def __init__(self, name, default, default_readable=True, context=None,
                  implicit_tag=None, explicit_tag=None):
         if default is not None and default_readable:
-            default = "".join(bin(ord(x))[2:].zfill(8) for x in default)
+            default = "".join(binrepr(ord(x)).zfill(8) for x in default)
         ASN1F_field.__init__(self, name, default, context=context,
                              implicit_tag=implicit_tag,
                              explicit_tag=explicit_tag)
@@ -522,7 +523,7 @@ class ASN1F_BIT_STRING_ENCAPS(ASN1F_BIT_STRING):
             s = ""
         else:
             s = str(x)
-        s = "".join(bin(ord(x))[2:].zfill(8) for x in s)
+        s = "".join(binrepr(ord(x)).zfill(8) for x in s)
         return ASN1F_BIT_STRING.i2m(self, pkt, s)
 
 class ASN1F_FLAGS(ASN1F_BIT_STRING):