繁体   English   中英

C ++将Char数组转换为十六进制字符串

[英]C++ Convert Char Array To Hex String

我正在使用一台非常旧的计算机,其中用于编译C++可执行文件的SDK不支持string ,因此我需要使用char arrays

此代码可以很好地将string转换为hex

std::string string_to_hex(const std::string& input)
{
    static const char* const lut = "0123456789ABCDEF";
    size_t len = input.length();

    std::string output;
    output.reserve(2 * len);
    for (size_t i = 0; i < len; ++i)
    {
        const unsigned char c = input[i];
        output.push_back(lut[c >> 4]);
        output.push_back(lut[c & 15]);
    }
    return output;
}

但是该函数适用于string数据类型,我不能使用它。

我也尝试过使用它,但无济于事。

char *hextostrTest(char *hexStr)
{
    size_t len = strlen(hexStr);
    int k = 0;
    if (len & 1) return NULL;

    char* output = new char[(len / 2) + 1];
    for (size_t i = 0; i < len; i += 2)
    {
        output[k++] = (((hexStr[i] >= 'A') ? (hexStr[i] - 'A' + 10) : (hexStr[i] - '0')) << 4) |
            (((hexStr[i + 1] >= 'A') ? (hexStr[i + 1] - 'A' + 10) : (hexStr[i + 1] - '0')));
    }
    output[k] = '\0';
    return output;
}

非常相似的东西:

const char* string_to_hex(const char *str, char *hex, size_t maxlen)
{
    static const char* const lut = "0123456789ABCDEF";

    if (str == NULL) return NULL;
    if (hex == NULL) return NULL;
    if (maxlen == 0) return NULL;

    size_t len = strlen(str);

    char *p = hex;

    for (size_t i = 0; (i < len) && (i < (maxlen-1)); ++i)
    {
        const unsigned char c = str[i];
        *p++ = lut[c >> 4];
        *p++ = lut[c & 15];
    }

    *p++ = 0;

    return hex;
}

int main()
{
    char hex[20];
    const char *result = string_to_hex("0123", hex, sizeof(hex));
    return 0;
}

只需对std :: string使用相同的函数,但使用char *,

#include <iostream>                                                    
#include <cstdlib>                                                     
#include <cstring>                                                     
#include <string>                                                      

using namespace std;                                                   

char *string_to_hex(char *input) {                                     
    static const char *const lut = "0123456789ABCDEF";                 
    size_t len = strlen(input);                                        
    int k = 0;                                                         
    if (len & 1)                                                       
        return NULL;                                                   

    char *output = new char[(len / 2) + 1];                            

    for (size_t i = 0, j = 0; i < len; i++, j += 2) {                  
        const unsigned char c = input[i];                              
        output[j]     = lut[c >> 4];                                       
        output[j + 1] = lut[c & 15];                                   
    }                                                                  

    return output;                                                     
}                                                                      

std::string string_to_hex(const std::string &input) {                  
    static const char *const lut = "0123456789ABCDEF";                 
    size_t len = input.length();                                       

    std::string output;                                                
    output.reserve(2 * len);                                           
    for (size_t i = 0; i < len; ++i) {                                 
        const unsigned char c = input[i];                              
        output.push_back(lut[c >> 4]);                                 
        output.push_back(lut[c & 15]);                                 
    }                                                                  
    return output;                                                     
}                                                                      

int main() {                                                           
    string test = "Test";                                              
    std::string res(string_to_hex(test.c_str()));                      
    cout << res << endl;                                               
    res = string_to_hex(test);                                         
    cout << res << endl;                                               
}                                                                      

剪切的两个代码看起来像相反的代码。

char* string_to_hex(const char* input) {
    static const char* const lut = "0123456789ABCDEF";
    size_t len = strlen(input);

    char* output = new char[len*2+1];
    int index = 0;
    for(size_t i = 0; i < len; ++i) {
        const unsigned char c = input[i];
        output[index++] = lut[c >> 4];
        output[index++] = lut[c & 15];
    }
    output[index] = '\0';
    return output;
}

这是第一个代码的字符串-> char *版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM