您的位置:

c++字符串转16进制

一、字符串转16进制

字符串转16进制是指将字符串表示的数据转换成16进制的数据形式,方便数据的传输和存储。在c++中,可以使用std::stringstreamstd::hex实现字符串转16进制。

    std::string str = "hello";
    std::stringstream ss;
    ss << std::hex;
    for (size_t i = 0; i < str.length(); ++i) {
        ss << std::setw(2) << std::setfill('0') << static_cast(str[i]);
    }
    std::string hex_str = ss.str();    // hex_str: "68656c6c6f"

  

在上面的代码实现中,首先定义了一个字符串str,接着使用std::stringstream将数据以std::hex的格式输出,然后循环遍历字符串中的每一个字符,使用std::setw()std::setfill()设置每个字符的输出宽度和填充字符('0'),最后将转换后的16进制字符串存储到变量hex_str中。

二、c字符串转16进制

c字符串是指以'\0'结尾的一段字符数组,将其转换成16进制时需要注意字符串的结尾字符不需要转换。

    char c_str[] = "hello";
    std::string hex_str;
    for (size_t i = 0; i < strlen(c_str); ++i) {
        std::stringstream ss;
        ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(c_str[i]);
        hex_str += ss.str();
    }
    // hex_str: "68656c6c6f"

  

在此示例中,定义了一个c字符串c_str,然后将每个字符转换成16进制并存储到空的字符串hex_str中。

三、字符串转16进制 c

c语言中的字符串需要注意字符集的问题,以及需要充分使用指针操作来遍历字符串,进行字符转换。

    #include 
    #include 
   
    #include 
    
    void str_to_hex(char* str, char* hex_str) {
        int i;
        int size = strlen(str);
        for (i = 0; i < size; ++i) {
            sprintf(&hex_str[i*2], "%02X", str[i]);
        }
    }
    int main() {
        char* str = "hello";
        char hex_str[13];
        str_to_hex(str, hex_str);
        printf("%s", hex_str);    // "68656C6C6F"
        return 0;
    }

    
   
  

该示例中,定义了一个字符串str,然后使用函数str_to_hex()将该字符串转换成16进制字符串,最后输出结果。函数sprintf()可以将格式化的字符串存储到指定位置,其中的格式化字符串"%02X"即表示2位16进制数,不足位数使用'0'补齐。

四、c字符串转16进制数字

c字符串也可以转换成16进制数字,可以利用字符串分离成单个字符,然后分别进行转换。

    #include 
    #include 
   
    #include 
    
    int main() {
        char* str = "hello";
        int i, size = strlen(str);
        for (i = 0; i < size; ++i) {
            printf("%02X", str[i]);
        }
        return 0;
    }

    
   
  

在该示例中,c字符串str转换成了16进制数字,并使用printf()输出结果。

五、字符串转16进制在线工具

使用在线工具可以快速地将字符串转换成16进制表示。

实例网址:https://www.jacksondunstan.com/articles/4079

六、字符串转16进制函数

将字符串转换成16进制可以封装成函数,方便调用。

    std::string str2hex(std::string str) {
        std::stringstream ss;
        ss << std::hex;
        for (size_t i = 0; i < str.length(); ++i) {
            ss << std::setw(2) << std::setfill('0') << static_cast(str[i]);
        }
        return ss.str();
    }
    int main() {
        std::string str = "hello";
        std::string hex_str = str2hex(str);
        // hex_str: "68656c6c6f"
        return 0;
    }

  

在该示例中,定义了一个函数str2hex(),使用std::stringstream和其它函数将字符串转换成16进制,然后返回结果。

七、字符串转16进制byte数组

16进制byte数组和16进制字符串可以互相转换。

    std::string str = "hello";
    std::vector bytes(str.begin(), str.end());
    std::string hex_str(bytes.size() * 2, ' ');
    auto table = "0123456789ABCDEF";
    for (size_t i = 0; i < bytes.size(); ++i) {
        hex_str[i*2] = table[bytes[i] >> 4];
        hex_str[i*2+1] = table[bytes[i] & 0x0f];
    }
    // hex_str: "68656C6C6F"

  

该示例中使用std::vector存储每个字符的byte值,使用字符数组将byte值转换成16进制数,并拼接成16进制字符串。

八、字符串转16进制字符串

字符串可以直接转换成16进制字符串,例如使用iostream。

    #include 
    #include 
   
    std::string str = "hello";
    std::ostringstream oss;
    for (size_t i = 0; i < str.length(); ++i) {
        oss << std::hex << std::setfill('0') << std::setw(2) << (int) str[i];
    }
    std::string hex_str = oss.str();    // hex_str: "68656c6c6f"

   
  

该示例中使用了std::ostringstream作为输出缓存,分别使用std::hex和其他函数转换成16进制数,然后使用stream对象输出结果。

九、c将字符串转换成16进制

c语言中也可以使用内置函数将字符串转换成16进制。

    #include 
    #include 
   
    #include 
    
    int main() {
        char* str = "hello";
        char hex_str[13];
        int i;
        for (i = 0; i < strlen(str); i++) {
            sprintf(hex_str+i*2, "%02X", str[i]);
        }
        printf("%s", hex_str);    // hex_str: "68656C6C6F"
        return 0;
    }

    
   
  

在该示例中,使用了函数sprintf()将转换后的结果存储到变量hex_str中,并输出结果。