| def dataToHex(d): |
| """ Convert the raw data in 'd' to an hex string with a space every 4 bytes. |
| """ |
| bytes = [] |
| for i,c in enumerate(d): |
| byte = ord(c) |
| hex_byte = hex(byte)[2:] |
| if byte <= 0xf: |
| hex_byte = '0' + hex_byte |
| if i % 4 == 3: |
| hex_byte += ' ' |
| bytes.append(hex_byte) |
| return ''.join(bytes).strip() |
| |
| def dataToHexUnified(d): |
| """ Convert the raw data in 'd' to an hex string with a space every 4 bytes. |
| Each 4byte number is prefixed with 0x for easy sed/rx |
| Fixme: convert all MC tests to use this routine instead of the above |
| """ |
| bytes = [] |
| for i,c in enumerate(d): |
| byte = ord(c) |
| hex_byte = hex(byte)[2:] |
| if byte <= 0xf: |
| hex_byte = '0' + hex_byte |
| if i % 4 == 0: |
| hex_byte = '0x' + hex_byte |
| if i % 4 == 3: |
| hex_byte += ' ' |
| bytes.append(hex_byte) |
| return ''.join(bytes).strip() |
| |
| |
| def HexDump(valPair): |
| """ |
| 1. do not print 'L' |
| 2. Handle negatives and large numbers by mod (2^numBits) |
| 3. print fixed length, prepend with zeros. |
| Length is exactly 2+(numBits/4) |
| 4. Do print 0x Why? |
| so that they can be easily distinguished using sed/rx |
| """ |
| val, numBits = valPair |
| assert 0 <= val < (1 << numBits) |
| |
| val = val & (( 1 << numBits) - 1) |
| newFmt = "0x%0" + "%d" % (numBits / 4) + "x" |
| return newFmt % val |