c++char*转string_java中String.valueOf()方法使用详解

本文回顾了Java编程中常遇的基本数据类型转换至String的方法,包括String.valueOf的各种用法,并强调理解这些转换的重要性。同时介绍了如何由String逆向转换成数值类型。
7c48a6cbb5918ac30d5750a6a2ba19e4.png

走的越远越不能忘记当初行走之前的初衷,你是否还记得那个满头茂密黑发的你呢?

java小基础,工作中经常用到的小方法,你可曾真正的懂过它?

一、由基本数据型态转换成String

  String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 ,也就是 String.valueOf() 这个参数多载的方法

有以下几种:

(1)String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串

(2)String.valueOf(char c) : 将 char 变量 c 转换成字符串

(3)String.valueOf(char[] data) : 将 char 数组 data 转换成字符串

(4)String.valueOf(char[] data, int offset, int count) : 将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串

(5)String.valueOf(double d) : 将 double 变量 d 转换成字符串

(6)String.valueOf(float f) : 将 float 变量 f 转换成字符串

(7)String.valueOf(int i) : 将 int 变量 i 转换成字符串

(8)String.valueOf(long l) : 将 long 变量 l 转换成字符串

(9)String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString()

  用法如下:

  int i = 10;

  String str = String.valueOf(i);

  这时候 str 就会是 "10"

8d389b45f6583789213701ab861d0f89.png

二、 由 String 转换成 数字的基本数据型态

  要将 String 转换成基本数据型态转 ,大多需要使用基本数据型态的包装类别

  比如说 String 转换成 byte ,可以使用 Byte.parseByte(String s) ,这一类的方法如果无法将 s 分析 则会丢出 NumberFormatException

(1)byte : Byte.parseByte(String s) : 将 s 转换成 byte

(2)Byte.parseByte(String s, int radix) : 以 radix 为基底 将 s 转换为 byte ,比如说 Byte.parseByte("11

#if defined(__linux__) /* * Copyright (c) 2014 Craig Lilley <cralilley@gmail.com> * This software is made available under the terms of the MIT licence. * A copy of the licence can be obtained from: * http://opensource.org/licenses/MIT */ #include <vector> #include <string> #include <sstream> #include <stdexcept> #include <iostream> #include <fstream> #include <cstdio> #include <cstdarg> #include <cstdlib> #include <glob.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include "serial/serial.h" using serial::PortInfo; using std::istringstream; using std::ifstream; using std::getline; using std::vector; using std::string; using std::cout; using std::endl; static vector<string> glob(const vector<string>& patterns); static string basename(const string& path); static string dirname(const string& path); static bool path_exists(const string& path); static string realpath(const string& path); static string usb_sysfs_friendly_name(const string& sys_usb_path); static vector<string> get_sysfs_info(const string& device_path); static string read_line(const string& file); static string usb_sysfs_hw_string(const string& sysfs_path); static string format(const char* format, ...); vector<string> glob(const vector<string>& patterns) { vector<string> paths_found; if(patterns.size() == 0) return paths_found; glob_t glob_results; int glob_retval = glob(patterns[0].c_str(), 0, NULL, &glob_results); vector<string>::const_iterator iter = patterns.begin(); while(++iter != patterns.end()) { glob_retval = glob(iter->c_str(), GLOB_APPEND, NULL, &glob_results); } for(int path_index = 0; path_index < glob_results.gl_pathc; path_index++) { paths_found.push_back(glob_results.gl_pathv[path_index]); } globfree(&glob_results); return paths_found; } string basename(const string& path) { size_t pos = path.rfind("/"); if(pos == std::string::npos) return path; return string(path, pos+1, string::npos); } string dirname(const string& path) { size_t pos = path.rfind("/"); if(pos == std::string::npos) return path; else if(pos == 0) return "/"; return string(path, 0, pos); } bool path_exists(const string& path) { struct stat sb; if( stat(path.c_str(), &sb ) == 0 ) return true; return false; } string realpath(const string& path) { char* real_path = realpath(path.c_str(), NULL); string result; if(real_path != NULL) { result = real_path; free(real_path); } return result; } string usb_sysfs_friendly_name(const string& sys_usb_path) { unsigned int device_number = 0; istringstream( read_line(sys_usb_path + "/devnum") ) >> device_number; string manufacturer = read_line( sys_usb_path + "/manufacturer" ); string product = read_line( sys_usb_path + "/product" ); string serial = read_line( sys_usb_path + "/serial" ); if( manufacturer.empty() && product.empty() && serial.empty() ) return ""; return format("%s %s %s", manufacturer.c_str(), product.c_str(), serial.c_str() ); } vector<string> get_sysfs_info(const string& device_path) { string device_name = basename( device_path ); string friendly_name; string hardware_id; string sys_device_path = format( "/sys/class/tty/%s/device", device_name.c_str() ); if( device_name.compare(0,6,"ttyUSB") == 0 ) { sys_device_path = dirname( dirname( realpath( sys_device_path ) ) ); if( path_exists( sys_device_path ) ) { friendly_name = usb_sysfs_friendly_name( sys_device_path ); hardware_id = usb_sysfs_hw_string( sys_device_path ); } } else if( device_name.compare(0,6,"ttyACM") == 0 ) { sys_device_path = dirname( realpath( sys_device_path ) ); if( path_exists( sys_device_path ) ) { friendly_name = usb_sysfs_friendly_name( sys_device_path ); hardware_id = usb_sysfs_hw_string( sys_device_path ); } } else { // Try to read ID string of PCI device string sys_id_path = sys_device_path + "/id"; if( path_exists( sys_id_path ) ) hardware_id = read_line( sys_id_path ); } if( friendly_name.empty() ) friendly_name = device_name; if( hardware_id.empty() ) hardware_id = "n/a"; vector<string> result; result.push_back(friendly_name); result.push_back(hardware_id); return result; } string read_line(const string& file) { ifstream ifs(file.c_str(), ifstream::in); string line; if(ifs) { getline(ifs, line); } return line; } string format(const char* format, ...) { va_list ap; size_t buffer_size_bytes = 256; string result; char* buffer = (char*)malloc(buffer_size_bytes); if( buffer == NULL ) return result; bool done = false; unsigned int loop_count = 0; while(!done) { va_start(ap, format); int return_value = vsnprintf(buffer, buffer_size_bytes, format, ap); if( return_value < 0 ) { done = true; } else if( return_value >= buffer_size_bytes ) { // Realloc and try again. buffer_size_bytes = return_value + 1; char* new_buffer_ptr = (char*)realloc(buffer, buffer_size_bytes); if( new_buffer_ptr == NULL ) { done = true; } else { buffer = new_buffer_ptr; } } else { result = buffer; done = true; } va_end(ap); if( ++loop_count > 5 ) done = true; } free(buffer); return result; } string usb_sysfs_hw_string(const string& sysfs_path) { string serial_number = read_line( sysfs_path + "/serial" ); if( serial_number.length() > 0 ) { serial_number = format( "SNR=%s", serial_number.c_str() ); } string vid = read_line( sysfs_path + "/idVendor" ); string pid = read_line( sysfs_path + "/idProduct" ); return format("USB VID:PID=%s:%s %s", vid.c_str(), pid.c_str(), serial_number.c_str() ); } vector<PortInfo> serial::list_ports() { vector<PortInfo> results; vector<string> search_globs; search_globs.push_back("/dev/ttyACM*"); search_globs.push_back("/dev/ttyS*"); search_globs.push_back("/dev/ttyUSB*"); search_globs.push_back("/dev/tty.*"); search_globs.push_back("/dev/cu.*"); vector<string> devices_found = glob( search_globs ); vector<string>::iterator iter = devices_found.begin(); while( iter != devices_found.end() ) { string device = *iter++; vector<string> sysfs_info = get_sysfs_info( device ); string friendly_name = sysfs_info[0]; string hardware_id = sysfs_info[1]; PortInfo device_entry; device_entry.port = device; device_entry.description = friendly_name; device_entry.hardware_id = hardware_id; results.push_back( device_entry ); } return results; } #endif // defined(__linux__) 帮我把每一行加上注释,并且给我详细讲一遍
最新发布
10-31
请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码 要求如下: 1.保持所有原始功能不变 2.提高执行效率,降低计算复杂度 3.已经给定的结构体名字和元素不要更改,详细的中文注释 4.自动添加中文注释说明功能逻辑 5.使用 auto,使用显式 for 循环 6.结构体采用32位定 7.不要使用小函数,保持原始的函数定 8.严格保持protobuf字段映射关系 特别注意: 1.函数中有关位操作不变,函数间的位操作一致, 详细注释位操作 2.函数中的 HDDMXng::BelUsageDef::BelUsageDef 映射为 message BelUsageDef { optional uint32 numhiddencfgs = 1; optional uint32 numcfgs = 2; optional uint32 numattribs = 3; } 3.采用 google::protobuf::Descriptor 和 google::protobuf::Reflection 进行编程 4.不要使用如 HIBYTE 等宏定 5.将函数中的 _BYTE usagedef_msg[16] 映射为 HDDMXng::BelUsageDef usagedef_msg 6.将函数中的 hddmBelUsageAttribVec、hddmBelUsageAttribVec_End、 hddmBelUsageAttribVec_Cap 映射为 std::vector<HDDMBelUsageAttrib *> hddmBelUsageAttribVec void HDDMBelUsageDef::HDDMBelUsageDef(HDDMBelUsageDef *this) { int v1; // eax this->usagedef_code = 0; v1 = *(_DWORD *)&this->usagedef_code; this->hddmBelUsageAttribVec = 0; this->hddmBelUsageAttribVec_Cap = 0; this->ppHddmBelUsageAttrib = 0; *(_DWORD *)&this->char28 = 0; this->qword30 = 0; this->qword48 = 0; *(_DWORD *)&this->usagedef_code = v1 & 0xFFF000FF; this->? = 0; this->qword50 = 0; this->qword38 = &this->char28; this->qword40 = &this->char28; } void HDDMBelUsageDef::addattrib(HDDMBelUsageDef *this) { HDDMBelUsageAttrib *v1; // rbp HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap; // rax bool v3; // zf __int64 hddmBelUsageAttribVec_Cap_1; // rdx __int64 v5[5]; // [rsp+0h] [rbp-28h] BYREF v1 = (HDDMBelUsageAttrib *)operator new(0x50u); HDDMBelUsageAttrib::HDDMBelUsageAttrib(v1); hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap; v3 = hddmBelUsageAttribVec_Cap == this->ppHddmBelUsageAttrib; v5[0] = (__int64)v1; if ( v3 ) { std::vector<HDDMBelUsageAttrib *>::_M_emplace_back_aux<HDDMBelUsageAttrib * const&>( &this->hddmBelUsageAttribVec, v5); } else { if ( hddmBelUsageAttribVec_Cap ) { *hddmBelUsageAttribVec_Cap = v1; hddmBelUsageAttribVec_Cap_1 = this->hddmBelUsageAttribVec_Cap; } else { hddmBelUsageAttribVec_Cap_1 = 0; } this->hddmBelUsageAttribVec_Cap = hddmBelUsageAttribVec_Cap_1 + 8; } } HDDMBelUsageAttrib * HDDMBelUsageDef::getAttrib(HDDMBelUsageDef *this, const std::string *stdString) { __int64 p_char28; // rax HDDMBelUsageAttrib *result; // rax __int64 v4; // rdi int v5; // edx HDDMBelUsageAttrib *v6; // [rsp+8h] [rbp-40h] char v7; // [rsp+1Fh] [rbp-29h] BYREF _QWORD v8[5]; // [rsp+20h] [rbp-28h] BYREF std::string::string(v8, *(_QWORD *)stdString, &v7); p_char28 = std::_Rb_tree<std::string,std::pair<std::string const,unsigned short>,std::_Select1st<std::pair<std::string const,unsigned short>>,std::less<std::string>,std::allocator<std::pair<std::string const,unsigned short>>>::find( &this->gap20, v8); if ( (_QWORD *)p_char28 == &this->char28 ) result = 0; else result = *(HDDMBelUsageAttrib **)(*(_QWORD *)&this->hddmBelUsageAttribVec + 8LL * *(unsigned __int16 *)(p_char28 + 40)); v4 = v8[0] - 24LL; if ( (_UNKNOWN *)(v8[0] - 24LL) != &std::string::_Rep::_S_empty_rep_storage ) { if ( &_pthread_key_create ) { v5 = _InterlockedExchangeAdd((volatile signed __int32 *)(v8[0] - 8LL), 0xFFFFFFFF); } else { v5 = *(_DWORD *)(v8[0] - 8LL); *(_DWORD *)(v8[0] - 8LL) = v5 - 1; } if ( v5 <= 0 ) { v6 = result; std::string::_Rep::_M_destroy(v4, &v7); return v6; } } return result; } 将 _QWORD *pHddmBelUsageAttribVec 映射为 映射为 std::vector<HDDMBelUsageAttrib *> pHddmBelUsageAttribVec HDDMBelUsageAttrib * HDDMBelUsageDef::getAttribs(HDDMBelUsageDef *this, _QWORD *pHddmBelUsageAttribVec) { HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap_2; // rsi HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap; // rdi unsigned __int64 v6; // rdx unsigned __int64 v7; // rax HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap_1; // rax __int64 v9; // r8 char *v10; // rdx hddmBelUsageAttribVec_Cap_2 = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec; hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap; v6 = ((char *)hddmBelUsageAttribVec_Cap - (char *)hddmBelUsageAttribVec_Cap_2) >> 3; v7 = (__int64)(pHddmBelUsageAttribVec[1] - *pHddmBelUsageAttribVec) >> 3; if ( v6 > v7 ) { std::vector<HDDMBelUsageAttrib *>::_M_default_append(pHddmBelUsageAttribVec, v6 - v7); hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap; hddmBelUsageAttribVec_Cap_2 = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec; } else if ( v6 < v7 ) { pHddmBelUsageAttribVec[1] = *pHddmBelUsageAttribVec + 8 * v6; hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap; hddmBelUsageAttribVec_Cap_2 = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec; } hddmBelUsageAttribVec_Cap_1 = hddmBelUsageAttribVec_Cap_2; if ( hddmBelUsageAttribVec_Cap_2 != hddmBelUsageAttribVec_Cap ) { do { v9 = *(_QWORD *)&hddmBelUsageAttribVec_Cap_1->attrib_flags; v10 = (char *)((char *)hddmBelUsageAttribVec_Cap_1 - (char *)hddmBelUsageAttribVec_Cap_2); hddmBelUsageAttribVec_Cap_1 = (HDDMBelUsageAttrib *)((char *)hddmBelUsageAttribVec_Cap_1 + 8); *(_QWORD *)&v10[*pHddmBelUsageAttribVec] = v9; } while ( (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap != hddmBelUsageAttribVec_Cap_1 ); } return hddmBelUsageAttribVec_Cap_1; } void HDDMBelUsageDef::print(HDDMBelUsageDef *this, std::ostream *stream, const std::string *filename) { std::ostream *v5; // rbp __int64 v6; // rax _BYTE *v7; // r12 char v8; // al std::ostream *v9; // rax HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap_1; // rbp HDDMBelUsageAttrib *v11; // rdi HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap; // r12 __int64 v13; // rax _BYTE *v14; // r12 char v15; // al std::ostream *v16; // rax __int64 v17; // rax _BYTE *v18; // rbp char v19; // al std::ostream *v20; // rax if ( (__int64)(this->hddmBelUsageAttribVec_Cap - *(_QWORD *)&this->hddmBelUsageAttribVec) >> 3 ) { v5 = (std::ostream *)std::__ostream_insert<char,std::char_traits<char>>( stream, *(_QWORD *)filename, *(_QWORD *)(*(_QWORD *)filename - 24LL)); std::__ostream_insert<char,std::char_traits<char>>(v5, "ATTRIBUTES:", 11); v6 = *(_QWORD *)(*(_QWORD *)v5 - 24LL); v7 = *(_BYTE **)((char *)v5 + v6 + 240); if ( !v7 ) LABEL_21: std::__throw_bad_cast(); if ( v7[56] ) { v8 = v7[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)v5 + v6 + 240)); v8 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v7 + 48LL))(v7, 10); } v9 = (std::ostream *)std::ostream::put(v5, v8); std::ostream::flush(v9); hddmBelUsageAttribVec_Cap_1 = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec; while ( (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap != hddmBelUsageAttribVec_Cap_1 ) { while ( 1 ) { v11 = *hddmBelUsageAttribVec_Cap_1++; HDDMBelUsageAttrib::print(v11, stream, filename); hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap; if ( hddmBelUsageAttribVec_Cap == hddmBelUsageAttribVec_Cap_1 ) break; std::__ostream_insert<char,std::char_traits<char>>(stream, ",", 1); v13 = *(_QWORD *)(*(_QWORD *)stream - 24LL); v14 = *(_BYTE **)((char *)stream + v13 + 240); if ( !v14 ) goto LABEL_21; if ( v14[56] ) { v15 = v14[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)stream + v13 + 240)); v15 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v14 + 48LL))(v14, 10); } v16 = (std::ostream *)std::ostream::put(stream, v15); std::ostream::flush(v16); if ( (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap == hddmBelUsageAttribVec_Cap_1 ) return; } std::__ostream_insert<char,std::char_traits<char>>(stream, ";", 1); v17 = *(_QWORD *)(*(_QWORD *)stream - 24LL); v18 = *(_BYTE **)((char *)stream + v17 + 240); if ( !v18 ) goto LABEL_21; if ( v18[56] ) { v19 = v18[67]; } else { std::ctype<char>::_M_widen_init(*(_QWORD *)((char *)stream + v17 + 240)); v19 = (*(__int64 (__fastcall **)(_BYTE *, __int64))(*(_QWORD *)v18 + 48LL))(v18, 10); } hddmBelUsageAttribVec_Cap_1 = hddmBelUsageAttribVec_Cap; v20 = (std::ostream *)std::ostream::put(stream, v19); std::ostream::flush(v20); } } } void __fastcall HDDMBelUsageDef::readme_pb(HDDMBelUsageDef *this, std::istream *stream, HDDMDevice *hddmDevice) { google::protobuf::Message *v4; // rdx unsigned int byte0; // eax __int16 v6; // dx int v7; // ebx HDDMBelUsageAttrib *v8; // rbx HDDMBelUsageAttrib **hddmBelUsageAttribVec_Cap; // rax bool v10; // zf __int64 qword10_1; // rax HDDMBelUsageAttrib *v12; // rdi _QWORD *qword30; // r15 std::string *s2; // rbx _QWORD *p_char28_1; // rbp size_t n_3; // r14 int n0x7FFFFFFF_1; // eax _QWORD *s1; // rdi size_t n_2; // r13 size_t n; // rdx __int64 n0x7FFFFFFF; // r13 _QWORD *s2_1; // rsi size_t n_4; // r15 size_t n_1; // rdx int v25; // eax __int64 p_char28_2; // rax __int16 v27; // cx _QWORD *p_char28; // [rsp+0h] [rbp-E8h] HDDMBelUsageAttrib *v29; // [rsp+8h] [rbp-E0h] int index; // [rsp+18h] [rbp-D0h] int v32; // [rsp+1Ch] [rbp-CCh] _QWORD *p_qword8; // [rsp+38h] [rbp-B0h] char v35; // [rsp+5Fh] [rbp-89h] BYREF HDDMBelUsageAttrib *pHddmBelUsageAttrib; // [rsp+60h] [rbp-88h] BYREF std::string **p_attrib_name; // [rsp+70h] [rbp-78h] BYREF _BYTE usagedef_msg[16]; // [rsp+80h] [rbp-68h] BYREF __int16 v39; // [rsp+90h] [rbp-58h] __int16 v40; // [rsp+94h] [rbp-54h] int v41; // [rsp+98h] [rbp-50h] if ( HDDMDeviceDump::useXngMarks ) std::istream::read(stream, HDDMDeviceDump::markBuffer, 11); HDDMXng::BelUsageDef::BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg); HDDMDevice::readMessage((HDDMDevice *)stream, (std::istream *)usagedef_msg, v4); p_qword8 = &this->hddmBelUsageAttribVec; byte0 = ((v39 & 0xFFF) << 8) | this->usagedef_code & 0xFFF000FF; v6 = v40; this->usagedef_code = byte0; HIWORD(this->usagedef_code) = (16 * v6) | BYTE2(byte0) & 0xF; v7 = v41; v32 = v41; std::vector<HDDMBelUsageAttrib *>::reserve(&this->hddmBelUsageAttribVec, v41); if ( v7 <= 0 ) goto LABEL_30; index = 0; p_char28 = &this->char28; do { v8 = (HDDMBelUsageAttrib *)operator new(0x50u); HDDMBelUsageAttrib::HDDMBelUsageAttrib(v8); hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap; v10 = hddmBelUsageAttribVec_Cap == this->ppHddmBelUsageAttrib; pHddmBelUsageAttrib = v8; if ( v10 ) { std::vector<HDDMBelUsageAttrib *>::_M_emplace_back_aux<HDDMBelUsageAttrib * const&>( p_qword8, &pHddmBelUsageAttrib); v12 = pHddmBelUsageAttrib; } else { if ( hddmBelUsageAttribVec_Cap ) { *hddmBelUsageAttribVec_Cap = v8; qword10_1 = this->hddmBelUsageAttribVec_Cap; v12 = pHddmBelUsageAttrib; } else { v12 = v8; qword10_1 = 0; } this->hddmBelUsageAttribVec_Cap = qword10_1 + 8; } HDDMBelUsageAttrib::readme_pb(v12, stream, hddmDevice); pHddmBelUsageAttrib->attrib_flags = ((index & 0xFFF) << 12) | pHddmBelUsageAttrib->attrib_flags & 0xFF000FFF; qword30 = (_QWORD *)this->qword30; v29 = pHddmBelUsageAttrib; if ( !qword30 ) { p_char28_1 = p_char28; goto LABEL_32; } s2 = pHddmBelUsageAttrib->attrib_name; p_char28_1 = p_char28; n_3 = *((_QWORD *)s2 - 3); do { while ( 1 ) { s1 = (_QWORD *)qword30[4]; n_2 = *(s1 - 3); n = n_2; if ( n_3 <= n_2 ) n = n_3; n0x7FFFFFFF_1 = memcmp(s1, s2, n); if ( !n0x7FFFFFFF_1 ) break; LABEL_12: if ( n0x7FFFFFFF_1 < 0 ) goto LABEL_19; LABEL_13: p_char28_1 = qword30; qword30 = (_QWORD *)qword30[2]; if ( !qword30 ) goto LABEL_20; } n0x7FFFFFFF = n_2 - n_3; if ( n0x7FFFFFFF > 0x7FFFFFFF ) goto LABEL_13; if ( n0x7FFFFFFF >= (__int64)0xFFFFFFFF80000000LL ) { n0x7FFFFFFF_1 = n0x7FFFFFFF; goto LABEL_12; } LABEL_19: qword30 = (_QWORD *)qword30[3]; } while ( qword30 ); LABEL_20: if ( p_char28 == p_char28_1 ) goto LABEL_32; s2_1 = (_QWORD *)p_char28_1[4]; n_4 = *(s2_1 - 3); n_1 = n_4; if ( n_3 <= n_4 ) n_1 = n_3; v25 = memcmp(s2, s2_1, n_1); if ( v25 ) { LABEL_27: if ( v25 < 0 ) goto LABEL_32; LABEL_28: p_char28_2 = (__int64)p_char28_1; goto LABEL_29; } if ( (__int64)(n_3 - n_4) > 0x7FFFFFFF ) goto LABEL_28; if ( (__int64)(n_3 - n_4) >= (__int64)0xFFFFFFFF80000000LL ) { v25 = n_3 - n_4; goto LABEL_27; } LABEL_32: p_attrib_name = &v29->attrib_name; p_char28_2 = std::_Rb_tree<std::string,std::pair<std::string const,unsigned short>,std::_Select1st<std::pair<std::string const,unsigned short>>,std::less<std::string>,std::allocator<std::pair<std::string const,unsigned short>>>::_M_emplace_hint_unique<std::piecewise_construct_t const&,std::tuple<std::string const&>,std::tuple<>>( &this->gap20, p_char28_1, &unk_7B5CA99, &p_attrib_name, &v35); LABEL_29: v27 = index++; *(_WORD *)(p_char28_2 + 40) = v27; } while ( v32 != index ); LABEL_30: HDDMXng::BelUsageDef::~BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg); } __int64 __fastcall HDDMBelUsageDef::setrecursivebelid(HDDMBelUsageDef *this, unsigned __int16 nId) { int v2; // esi HDDMBelUsageAttrib *hddmBelUsageAttribVec_Cap; // rdx int i; // esi HDDMBelUsageAttrib *HDDMBelUsageAttrib; // rcx __int64 result; // rax LOWORD(v2) = nId & 0xFFF; hddmBelUsageAttribVec_Cap = *(HDDMBelUsageAttrib **)&this->hddmBelUsageAttribVec; for ( i = 16 * v2; hddmBelUsageAttribVec_Cap != (HDDMBelUsageAttrib *)this->hddmBelUsageAttribVec_Cap; HIWORD(HDDMBelUsageAttrib->attrib_type) = i | HIWORD(HDDMBelUsageAttrib->attrib_type) & 0xF ) { HDDMBelUsageAttrib = *(HDDMBelUsageAttrib **)&hddmBelUsageAttribVec_Cap->attrib_flags; hddmBelUsageAttribVec_Cap = (HDDMBelUsageAttrib *)((char *)hddmBelUsageAttribVec_Cap + 8); result = i | HIWORD(HDDMBelUsageAttrib->attrib_type) & 0xFu; } return result; } __int64 __fastcall HDDMBelUsageDef::setrecursivedeviceid(HDDMBelUsageDef *this, unsigned __int16 nId) { __int64 *hddmBelUsageAttribVec_Cap; // rdx int i; // esi HDDMBelUsageAttrib *HDDMBelUsageAttrib; // rcx __int64 result; // rax hddmBelUsageAttribVec_Cap = *(__int64 **)&this->hddmBelUsageAttribVec; for ( i = nId & 0xF; hddmBelUsageAttribVec_Cap != (__int64 *)this->hddmBelUsageAttribVec_Cap; BYTE2(HDDMBelUsageAttrib->attrib_type) = i | BYTE2(HDDMBelUsageAttrib->attrib_type) & 0xF0 ) { HDDMBelUsageAttrib = (HDDMBelUsageAttrib *)*hddmBelUsageAttribVec_Cap++; result = i | BYTE2(HDDMBelUsageAttrib->attrib_type) & 0xF0u; } return result; } void __fastcall HDDMBelUsageDef::writeme_pb(HDDMBelUsageDef *this, std::ostream *stream) { int v2; // eax HDDMBelUsageAttrib **ppHDDMBelUsageAttrib; // rdx unsigned __int64 v4; // rax unsigned __int64 v5; // rbx _BYTE usagedef_msg[8]; // [rsp+0h] [rbp-58h] BYREF int v7; // [rsp+10h] [rbp-48h] int v8; // [rsp+14h] [rbp-44h] int v9; // [rsp+18h] [rbp-40h] unsigned int v10; // [rsp+20h] [rbp-38h] if ( HDDMDeviceDump::useXngMarks ) std::ostream::write(stream, "BELUSAGEDEF", 11); HDDMXng::BelUsageDef::BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg); v2 = (this->usagedef_code >> 8) & 0xFFF; v10 |= 7u; v7 = v2; v8 = HIWORD(this->usagedef_code) >> 4; v9 = (__int64)(this->hddmBelUsageAttribVec_Cap - *(_QWORD *)&this->hddmBelUsageAttribVec) >> 3; HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)usagedef_msg, (const google::protobuf::Message *)v10); ppHDDMBelUsageAttrib = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec; v4 = 0; v5 = 1; if ( (__int64)(this->hddmBelUsageAttribVec_Cap - (_QWORD)ppHDDMBelUsageAttrib) >> 3 ) { while ( 1 ) { HDDMBelUsageAttrib::writeme_pb(ppHDDMBelUsageAttrib[v4], stream); ppHDDMBelUsageAttrib = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec; if ( v5 >= (__int64)(this->hddmBelUsageAttribVec_Cap - (_QWORD)ppHDDMBelUsageAttrib) >> 3 ) break; v4 = v5++; } } HDDMXng::BelUsageDef::~BelUsageDef((HDDMXng::BelUsageDef *)usagedef_msg); } void HDDMBelUsageDef::~HDDMBelUsageDef(HDDMBelUsageDef *this) { HDDMBelUsageAttrib **i_1; // rbx HDDMBelUsageAttrib **i; // rax HDDMBelUsageAttrib *v3; // rbp void *v4; // rdi i_1 = *(HDDMBelUsageAttrib ***)&this->hddmBelUsageAttribVec; for ( i = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap; i_1 != i; ++i_1 ) { v3 = *i_1; if ( *i_1 ) { HDDMBelUsageAttrib::~HDDMBelUsageAttrib(*i_1); operator delete(v3); i = (HDDMBelUsageAttrib **)this->hddmBelUsageAttribVec_Cap; } } this->qword50 = 0; sub_21742B0(this); std::_Rb_tree<std::string,std::pair<std::string const,unsigned short>,std::_Select1st<std::pair<std::string const,unsigned short>>,std::less<std::string>,std::allocator<std::pair<std::string const,unsigned short>>>::_M_erase( &this->gap20, this->qword30); v4 = *(void **)&this->hddmBelUsageAttribVec; if ( v4 ) operator delete(v4); }
10-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值