private string get_print_msg(List <Field_Info> info_list, Bit_Buffer buffer) { string ret = ""; foreach (Field_Info info in info_list) { if (info.field_label == "arg") { string value = get_arg_string(info, buffer); ret += value; } else if (info.field_label == "vector") { string value = get_vector_string(info, buffer); ret += value; } else if (info.field_label == "struct") { string value = get_struct_string(info, buffer); ret += value; } else if (info.field_label == "if") { if (buffer.read_bits_available() >= 1 && buffer.read_bool()) { ret += get_print_msg(info.field_list, buffer); } } else if (info.field_label == "switch") { if (buffer.read_bits_available() >= info.field_bit) { uint case_val = buffer.read_uint(info.field_bit); foreach (Field_Info swinfo in info.field_list) { if (swinfo.field_label == "case" && swinfo.case_val == case_val) { //找到对应的case标签,对case标签内的child数组进行build ret += get_print_msg(swinfo.field_list, buffer); break; } } } } } return(ret); }
private string get_arg_string(Field_Info info, Bit_Buffer buffer, bool from_vector = false) { string ret = ""; if (!from_vector) { ret = (info.field_name + ":"); } if (info.field_type == "int") { int val = buffer.read_int(info.field_bit); ret += val.ToString(); } else if (info.field_type == "uint") { uint val = buffer.read_uint(info.field_bit); ret += val.ToString(); } else if (info.field_type == "int64") { long val = buffer.read_int64(); ret += val.ToString(); } else if (info.field_type == "uint64") { ulong val = buffer.read_uint64(); ret += val.ToString(); } else if (info.field_type == "float") { float val = buffer.read_decimal(32); ret += val.ToString(); } else if (info.field_type == "bool") { bool val = buffer.read_bool(); ret += val.ToString(); } else if (info.field_type == "string") { string val = buffer.read_string(); ret += "\"" + val + "\""; } return(ret + ", "); }