dump binary buffer in hex mode

本文介绍了一个用于打印内存中数据的十六进制转储函数snaRmHexDump的具体实现。该函数通过逐块读取内存并将其转换为十六进制形式输出,同时对不可打印字符进行替换,确保输出的可读性。此外,还提供了重复数据块的检测机制。
static void snaRmHexDump(int size, void *data)
{
    int j;
    int i;
    int    samesw = 0;
    int    count = 0;
    int len;
    unsigned char  buf[16];
    unsigned char  bufe[16];
    unsigned char  hexbuf[16];
    unsigned char  savebuf[16];
    unsigned char  *databuf = (unsigned char *)data;

    memset(hexbuf, 0, 16);
    for(j=0; j < size; j += 16) {
    memcpy(savebuf, hexbuf, 16);
    memset(hexbuf, 0, 16);
    len = size - j;
    if(len > 16)
        len = 16;
    memcpy(hexbuf, &databuf[j], len);
    memcpy(buf, hexbuf, 16);
    memcpy(bufe, hexbuf, 16);
    for(i = 0; i < 16; i++)
        if(!isprint(buf[i]) || buf[i] == '\0')
            buf[i] = '.';
    snaConvert(16, bufe);
    for(i = 0; i < 16; i++)
        if(!isprint(bufe[i]) || bufe[i] == '\0')
            bufe[i] = '.';
    if(memcmp(hexbuf, savebuf, 16)) {
        fprintf(tracefile, "%5.5x |%2.2x%2.2x%2.2x%2.2x %2.2x%2.2x%2.2x%2.2x %2.2x%2.2x%2.2x%2.2x %2.2x%2.2x%2.2x%2.2x| |%16.16s|%16.16s|\n",
        count, hexbuf[0], hexbuf[1], hexbuf[2], hexbuf[3], hexbuf[4],
        hexbuf[5], hexbuf[6], hexbuf[7], hexbuf[8], hexbuf[9],
        hexbuf[10], hexbuf[11], hexbuf[12], hexbuf[13], hexbuf[14],
        hexbuf[15], buf, bufe);
        samesw = 0;
    }
    else
        if(samesw == 0) {
        samesw = 1;
        fprintf(tracefile, "       ******SAME*****\n");
        }
    count += 16;
    }
    return;
}
讲解代码 from queue import Queue import numpy as np magic_word = b'\xAF\xBE\xAD\xDE' buffer_queue = Queue() def hex_dump(data, bytes_per_line=16): hex_chars = ' '.join(['{:02X}'.format(byte) for byte in data]) lines = [] for i in range(0, len(hex_chars), bytes_per_line * 3): hex_line = hex_chars[i:i + bytes_per_line * 3] lines.append(hex_line) return '\n'.join(lines) def print_data(data): print(hex_dump(data)) def trans_data_320m(data): #print(np.arange(3, 7)) # 输出: [3 4 5 6] #read_host_header # ============================================================================= # decimation_factor=2; # punc_mode = 0 # punc_bitmap = 255 # preamble_type=5 # upload_pkt_bw=4 # ============================================================================= interv_tones=251 num_streams=1 num_chains=2 num_tones=251*4 # ============================================================================= # if preamble_type==5: # if upload_pkt_bw==4: # if punc_bitmap!=255 and punc_bitmap!=0: # print("*********************************,punc_mode = 1") # punc_mode = 1 # if decimation_factor==2: # if punc_mode == 0: # num_tones = 251*4; # -125:125, for all four 80 MHz segments # ============================================================================= data_points = data.view(dtype=np.int16) real_part = data_points[::2] image_part = data_points[1::2] tones_complex = real_part + image_part * 1j result=[] for streamIdx in range(num_streams): for chainIdx in range(num_chains): idx= num_tones * (streamIdx*num_chains + chainIdx) tones = tones_complex[(0+idx):(num_tones+idx)] for i in range(4): result = np.append(result, tones[(0 + i *interv_tones): (125 + i *interv_tones)]) result = np.append(result, tones[124 + i *interv_tones]*0.5 + tones[126 + i *interv_tones]*0.5) result = np.append(result, tones[(126 + i *interv_tones):(251 + i *interv_tones)]) array = np.array(result).reshape(2, 251*4) return array #在目前的算法中,仅使用了timestamp信息,其余未使用,进行注释 def released_cypress_read_cfr_host_metadata(data): meta_data_string = data[:160] meta_data = {} # ============================================================================= # # Header # meta_data['start_magic_num_deadbeaf'] = int.from_bytes(meta_data_string[:4],byteorder='little')#[7 8 5 6 3 4 1 2] # meta_data['vendor_id'] = int.from_bytes(meta_data_string[4:8],byteorder='little') # meta_data['cfr_metadata_version'] = int.from_bytes(meta_data_string[8:9],byteorder='little') & 0xFF#位操作,用于确保结果是一个8位(即1字节)的整数。 # meta_data['cfr_data_version'] = int.from_bytes(meta_data_string[9:10],byteorder='little') & 0xFF # meta_data['chip_type'] = int.from_bytes(meta_data_string[10:11],byteorder='little') & 0xFF # meta_data['platform_type'] = int.from_bytes(meta_data_string[11:12],byteorder='little') & 0xFF #23:24 # meta_data['meta_data_length_no_header'] = int.from_bytes(meta_data_string[12:16],byteorder='little') & 0xFF # meta_data['meta_data_length_with_header'] = meta_data['meta_data_length_no_header'] + 24 # # # meta data # meta_data['capture_status'] = int.from_bytes(meta_data_string[24:25],byteorder='little') & 0xFF # meta_data['tx_bw'] = int.from_bytes(meta_data_string[24:26],byteorder='little') & 0xFFFF # meta_data['upload_bw'] = int.from_bytes(meta_data_string[26:27],byteorder='little') & 0xFF # meta_data['phy_mode'] = int.from_bytes(meta_data_string[27:28],byteorder='little') & 0xFF # meta_data['pri20_chan'] = int.from_bytes(meta_data_string[28:30],byteorder='little') & 0xFFFF # meta_data['center_freq1'] = int.from_bytes(meta_data_string[30:32],byteorder='little') & 0xFFFF # meta_data['center_freq2'] = int.from_bytes(meta_data_string[32:34],byteorder='little') & 0xFFFF # meta_data['capture_mode'] = int.from_bytes(meta_data_string[34:35],byteorder='little') & 0xFF # meta_data['capture_type'] = int.from_bytes(meta_data_string[25:36],byteorder='little') & 0xFF # ============================================================================= #meta_data['sts_count'] = int.from_bytes(meta_data_string[36:37],byteorder='little') & 0xFF #meta_data['rx_chain_mask'] = int.from_bytes(meta_data_string[37:38],byteorder='little') & 0xFF meta_data['timestamp'] = int.from_bytes(meta_data_string[38:46],byteorder='little') & 0xFFFFFFFFFFFFFFFF #meta_data['cfr_dump_length'] = int.from_bytes(meta_data_string[46:50],byteorder='little') & 0xFFFFFFFF # ============================================================================= # # MU meta data # meta_data['is_mu_ppdu'] = int.from_bytes(meta_data_string[50:51],byteorder='little') & 0xFF # meta_data['num_mu_users'] = int.from_bytes(meta_data_string[51:52],byteorder='little') & 0xFF # ============================================================================= meta_data['peer_mac1'] = ''.join([f'{x:02x}'.upper() for x in meta_data_string[52:58]]) # ============================================================================= # meta_data['peer_mac2'] = ''.join([f'{x:02x}'.upper() for x in meta_data_string[58:64]]) # meta_data['peer_mac3'] = ''.join([f'{x:02x}'.upper() for x in meta_data_string[64:70]]) # meta_data['peer_mac4'] = ''.join([f'{x:02x}'.upper() for x in meta_data_string[70:76]]) # ============================================================================= # ============================================================================= # meta_data['chain0_raw_rssi'] = int.from_bytes(meta_data_string[76:80],byteorder='little') # meta_data['chain1_raw_rssi'] = int.from_bytes(meta_data_string[80:84],byteorder='little') # meta_data['chain2_raw_rssi'] = int.from_bytes(meta_data_string[84:88],byteorder='little') # meta_data['chain3_raw_rssi'] = int.from_bytes(meta_data_string[88:92],byteorder='little') # meta_data['chain4_raw_rssi'] = int.from_bytes(meta_data_string[92:96],byteorder='little') # meta_data['chain5_raw_rssi'] = int.from_bytes(meta_data_string[96:100],byteorder='little') # meta_data['chain6_raw_rssi'] = int.from_bytes(meta_data_string[100:104],byteorder='little') # meta_data['chain7_raw_rssi'] = int.from_bytes(meta_data_string[104:108],byteorder='little') # ============================================================================= # ============================================================================= # meta_data['rssi_pri20_all_chains1'] = int.from_bytes(meta_data_string[76:77],byteorder='little') & 0xFF # meta_data['rssi_pri20_all_chains2'] = int.from_bytes(meta_data_string[80:81],byteorder='little') & 0xFF # if meta_data['rssi_pri20_all_chains1'] > 127: # meta_data['rssi_pri20_all_chains1'] = meta_data['rssi_pri20_all_chains1'] - 256 # if meta_data['rssi_pri20_all_chains2'] > 127: # meta_data['rssi_pri20_all_chains2'] = meta_data['rssi_pri20_all_chains2'] - 256 # meta_data['rssi_pri20_all_chains3'] = int.from_bytes(meta_data_string[84:85],byteorder='little') & 0xFF # meta_data['rssi_pri20_all_chains4'] = int.from_bytes(meta_data_string[88:89],byteorder='little') & 0xFF # meta_data['rssi_pri20_all_chains5'] = int.from_bytes(meta_data_string[92:93],byteorder='little') & 0xFF # meta_data['rssi_pri20_all_chains6'] = int.from_bytes(meta_data_string[96:97],byteorder='little') & 0xFF # meta_data['rssi_pri20_all_chains7'] = int.from_bytes(meta_data_string[100:101],byteorder='little') & 0xFF # meta_data['rssi_pri20_all_chains8'] = int.from_bytes(meta_data_string[104:105],byteorder='little') & 0xFF # ============================================================================= # ============================================================================= # meta_data['phase_all_chains_degree1'] = (int.from_bytes(meta_data_string[108:110],byteorder='little') & 0xFFFF)*360/(2**10) # meta_data['phase_all_chains_degree2'] = (int.from_bytes(meta_data_string[110:112],byteorder='little') & 0xFFFF)*360/(2**10) # if meta_data['phase_all_chains_degree1'] > 350: # meta_data['phase_all_chains_degree1'] = 0 # if meta_data['phase_all_chains_degree2'] > 350: # meta_data['phase_all_chains_degree2'] = 0 # meta_data['phase_all_chains_degree3'] = (int.from_bytes(meta_data_string[112:114],byteorder='little') & 0xFFFF)*360/(2**10) # meta_data['phase_all_chains_degree4'] = (int.from_bytes(meta_data_string[114:116],byteorder='little') & 0xFFFF)*360/(2**10) # meta_data['phase_all_chains_degree5'] = (int.from_bytes(meta_data_string[116:118],byteorder='little') & 0xFFFF)*360/(2**10) # meta_data['phase_all_chains_degree6'] = (int.from_bytes(meta_data_string[118:120],byteorder='little') & 0xFFFF)*360/(2**10) # meta_data['phase_all_chains_degree7'] = (int.from_bytes(meta_data_string[120:122],byteorder='little') & 0xFFFF)*360/(2**10) # meta_data['phase_all_chains_degree8'] = (int.from_bytes(meta_data_string[122:124],byteorder='little') & 0xFFFF)*360/(2**10) # # cfo_unsigned = int.from_bytes(meta_data_string[124:128], byteorder='little') # if cfo_unsigned > (2**31-1): # cfo_signed = cfo_unsigned - 2**32 # elif cfo_unsigned > (2**13-1): # cfo_signed = cfo_unsigned - 2**14 # # meta_data['cfo'] = cfo_signed # # # meta_data['gain_index_all_chains1'] = int.from_bytes(meta_data_string[128:129], byteorder='little') & 0xFF # meta_data['gain_index_all_chains2'] = int.from_bytes(meta_data_string[129:130], byteorder='little') & 0xFF # ============================================================================= # ============================================================================= # meta_data['gain_index_all_chains3'] = int.from_bytes(meta_data_string[130:131], byteorder='little') & 0xFF # meta_data['gain_index_all_chains4'] = int.from_bytes(meta_data_string[131:132], byteorder='little') & 0xFF # meta_data['gain_index_all_chains5'] = int.from_bytes(meta_data_string[132:133], byteorder='little') & 0xFF # meta_data['gain_index_all_chains6'] = int.from_bytes(meta_data_string[133:134], byteorder='little') & 0xFF # meta_data['gain_index_all_chains7'] = int.from_bytes(meta_data_string[134:135], byteorder='little') & 0xFF # meta_data['gain_index_all_chains8'] = int.from_bytes(meta_data_string[135:136], byteorder='little') & 0xFF # ============================================================================= # ============================================================================= # meta_data['agc_gain_tbl_index1'] = int.from_bytes(meta_data_string[152:153], byteorder='little') & 0xFF # meta_data['agc_gain_tbl_index2'] = int.from_bytes(meta_data_string[153:154], byteorder='little') & 0xFF # meta_data['agc_gain_tbl_index3'] = int.from_bytes(meta_data_string[154:155], byteorder='little') & 0xFF # meta_data['agc_gain_tbl_index4'] = int.from_bytes(meta_data_string[155:156], byteorder='little') & 0xFF # meta_data['agc_gain_tbl_index5'] = int.from_bytes(meta_data_string[156:157], byteorder='little') & 0xFF # meta_data['agc_gain_tbl_index6'] = int.from_bytes(meta_data_string[157:158], byteorder='little') & 0xFF # meta_data['agc_gain_tbl_index7'] = int.from_bytes(meta_data_string[158:159], byteorder='little') & 0xFF # meta_data['agc_gain_tbl_index8'] = int.from_bytes(meta_data_string[159:160], byteorder='little') & 0xFF # ============================================================================= return meta_data def released_cypress_read_cfr_ucode_header(data): meta_data_string = data[160:216] #parse_header_hex_info(meta_data_string) meta_data = {} # first 64 bits packet_info1 = int.from_bytes(meta_data_string[:2],byteorder='little') & 0xFFFF #& 0xFF#取两个字节, byteorder='little' binary_str1 = bin(packet_info1)[2:].zfill(16) #[2:]:去除0x meta_data['tag'] = hex(int(binary_str1[8:16], 2)) meta_data['length'] = int(binary_str1[2:8], 2) meta_data['reserved'] = int(binary_str1[0:2], 2) packet_info2 = int.from_bytes(meta_data_string[2:4],byteorder='little') & 0xFFFF binary_str2 = bin(packet_info2)[2:].zfill(16) meta_data['upload_done'] = int(binary_str2[15:16], 2) meta_data['capture_type'] = int(binary_str2[12:15], 2) meta_data['preamble_type'] = int(binary_str2[10:12], 2) meta_data['nss'] = int(binary_str2[7:10], 2) meta_data['num_chains'] = int(binary_str2[4:7], 2) meta_data['upload_pkt_bw'] = int(binary_str2[1:4], 2) meta_data['sw_peer_id_valid'] = int(binary_str2[:1], 2) meta_data['sw_peer_id'] = int.from_bytes(meta_data_string[4:6], byteorder='little') & 0xFFFF meta_data['phy_ppdu_id'] = int.from_bytes(meta_data_string[6:8], byteorder='little') & 0xFFFF # second 64 bits meta_data['total_bytes'] = int.from_bytes(meta_data_string[8:10], byteorder='little') & 0xFFFF packet_info = int.from_bytes(meta_data_string[12:14],byteorder='little') & 0xFFFF binary_str = bin(packet_info)[2:].zfill(16) meta_data['decimation_factor'] = int(binary_str[4:8], 2) meta_data['original_heltf_type'] = int(binary_str[0:4], 2) packet_info = int.from_bytes(meta_data_string[14:16],byteorder='little') & 0xFFFF binary_str = bin(packet_info)[2:].zfill(16) meta_data['reserved_5']=-1 meta_data['cbw']=-1 meta_data['punc_bitmap']=-1 meta_data['ext_preamble_type'] = int(binary_str[15:16], 2) if meta_data['ext_preamble_type'] ==1: meta_data['preamble_type'] = meta_data['ext_preamble_type'] + 4 if meta_data['preamble_type'] == 0: meta_data['cbw'] = int(binary_str[3:7], 2) meta_data['reserved_5'] = int(binary_str[1:3], 2) elif meta_data['preamble_type'] == 5: meta_data['punc_bitmap'] = int(binary_str[7:15], 2) meta_data['reserved_5'] = int(binary_str[0:7], 2) return meta_data
11-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值