Concise way to format list/array to custom(hex) string

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kurien Mathew

    #1

    Concise way to format list/array to custom(hex) string

    Hello,

    What will be a concise & efficient way to convert a list/array.array of
    n elements into a hex string? For e.g. given the bytes
    [116, 111, 110, 103, 107, 97]
    I would like the formatted string
    0x74 0x6f 0x6e 0x67 0x6b 0x61

    Is there an approach better than below:
    hex = ''
    for b in bytes:
    hex += ('0x%x '%b)


    Thanks
    Kurien

    Test program:
    import array
    import sys

    bytes = array.array('B' )
    bytes.fromstrin g("tongka")
    print bytes
    hex = ''
    for b in bytes:
    hex += ('0x%x '%b)
    print hex

  • John Machin

    #2
    Re: Concise way to format list/array to custom(hex) string

    On Aug 2, 9:53 pm, Kurien Mathew <kmat...@envivi o.frwrote:
    Hello,
    >
    What will be a concise & efficient way to convert a list/array.array of
    n elements into a hex string? For e.g. given the bytes
    [116, 111, 110, 103, 107, 97]
    I would like the formatted string
    0x74 0x6f 0x6e 0x67 0x6b 0x61
    >
    Is there an approach better than below:
    hex = ''
    for b in bytes:
    hex += ('0x%x '%b)
    >
    hex = ' '.join('0x%02x' % b for b in bytes)

    Comment

    • =?ISO-8859-1?Q?Zolt=E1n_Nagy?=

      #3
      Re: Concise way to format list/array to custom(hex) string

      Kurien Mathew írta:
      Hello,
      >
      What will be a concise & efficient way to convert a list/array.array of
      n elements into a hex string? For e.g. given the bytes
      [116, 111, 110, 103, 107, 97]
      I would like the formatted string
      0x74 0x6f 0x6e 0x67 0x6b 0x61
      >
      Is there an approach better than below:
      hex = ''
      for b in bytes:
      hex += ('0x%x '%b)
      >
      <snip>

      You should avoid multiple string additions, as each one creates a new
      string object (str objects are immutable). Try this:

      bytes = [116, 111, 110, 103, 107, 97]
      string = ''.join( ['0x%x '%b for b in bytes] )

      Comment

      • Grant Edwards

        #4
        Re: Concise way to format list/array to custom(hex) string

        On 2008-08-02, Zoltán Nagy <abesto0@gmail. comwrote:
        Kurien Mathew írta:
        >Hello,
        >>
        >What will be a concise & efficient way to convert a list/array.array of
        >n elements into a hex string? For e.g. given the bytes
        >[116, 111, 110, 103, 107, 97]
        >I would like the formatted string
        >0x74 0x6f 0x6e 0x67 0x6b 0x61
        >>
        >Is there an approach better than below:
        >hex = ''
        >for b in bytes:
        > hex += ('0x%x '%b)
        >>
        ><snip>
        >
        You should avoid multiple string additions, as each one creates a new
        string object (str objects are immutable). Try this:
        >
        bytes = [116, 111, 110, 103, 107, 97]
        string = ''.join( ['0x%x '%b for b in bytes] )
        That results in an extra ' ' and the end of the string. Try
        this:

        string = ' '.join(['0x%02x' % b for b in bytes])

        --
        Grant Edwards grante Yow! ... Just enough
        at time to do my LIBERACE
        visi.com impression...

        Comment

        • josh logan

          #5
          Re: Concise way to format list/array to custom(hex) string

          On Aug 2, 9:29 am, Grant Edwards <gra...@visi.co mwrote:
          On 2008-08-02, Zoltán Nagy <abes...@gmail. comwrote:
          >
          >
          >
          >
          >
          Kurien Mathew írta:
          Hello,
          >
          What will be a concise & efficient way to convert a list/array.array of
          n elements into a hex string? For e.g. given the bytes
          [116, 111, 110, 103, 107, 97]
          I would like the formatted string
          0x74 0x6f 0x6e 0x67 0x6b 0x61
          >
          Is there an approach better than below:
          hex = ''
          for b in bytes:
              hex += ('0x%x '%b)
          >
          <snip>
          >
          You should avoid multiple string additions, as each one creates a new
          string object (str objects are immutable). Try this:
          >
          bytes = [116, 111, 110, 103, 107, 97]
          string = ''.join( ['0x%x '%b for b in bytes] )
          >
          That results in an extra ' ' and the end of the string.  Try
          this:
          >
          string = ' '.join(['0x%02x' % b for b in bytes])
          >
          --
          Grant Edwards                   grante             Yow!  ... Just enough
                                            at               time to do my LIBERACE
                                         visi.com            impression...
          There is also a built-in hex() method in the Python Standard Library.
          So, to make it cleaner:
          ' '.join(hex(x) for x in bytes)

          Comment

          Working...