如何将字符串加载到BYTE *数组(C ++)的元素中

时间:2018-07-24 20:05:00

标签: c++ arrays unsigned-char

我有一个程序来接收文件的内容并将其转换为十六进制。我想获取这些十六进制值并将它们存储为我称为hexData的unsigned char数组的元素。我该怎么办?

我尝试将十六进制数据转换为string literal(例如0x5A)并将其强制转换为char*,但是当我尝试运行代码时,没有任何反应(无输出) ,没有错误)。这似乎也是一种非常低效的方法。我把代码留在我的意思了。


#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

typedef unsigned char      BYTE;
typedef unsigned short int WORD;

int main()
{

    ifstream ifd("C:\\Users\\Shayon Shakoorzadeh\\Documents\\test.txt", ios::binary | ios::ate);
    int size = ifd.tellg();
    ifd.seekg(0, ios::beg);
    vector<char> buffer;
    buffer.resize(size);
    ifd.read(buffer.data(), size);

    static BYTE hexData[100000] =
    {

    };

    string tempStr;
    char *tempChar;

    const int N = 16;
    const char hex[] = "0123456789ABCDEF";
    char buf[N*4+5+2];

    for (int i = 0; i < buffer.size(); ++i)
    {
        int n = i % N;

        // little endian format
        if (i > 0 && i < buffer.size()-1)
            swap(buffer[i], buffer[i+1]);

        // checks to see if at the end
        if (n == 0)
        {
            memset(buf, 0x20, sizeof(buf));
            buf[sizeof(buf) - 3] = '\n';
            buf[sizeof(buf) - 1] = '\0';
        }
        unsigned char c = (unsigned char)buffer[i];

        // storing the hex values
        buf[n*3+0] = hex[c / 16];
        buf[n*3+1] = hex[c % 16];

        //encoded buffer
        buf[3*N+5+n] = (c>=' ' && c<='~') ? c : '.';

        //my attempt
        tempStr = "0x" + string(1, hex[c / 16]) + string(1, hex[c % 16]);
        tempChar = (char*)alloca(tempStr.size() + 1);
        memcpy(tempChar, tempStr.c_str(), tempStr.size() + 1);
        strcpy( (char*) hexData[i] , tempChar);


     }
 }

静态BYTE hexData []数组需要具有如下所示的值:

{0x5A, 0x00, 0x7F, 0x90, 0x8A,...}等等

任何帮助将不胜感激!

编辑:

让我指定,我在将这些值存储到名为“ hexData”的数组中时遇到麻烦。我已经从文件中获取了十六进制值,但是只能作为字符串。我想将这些字符串转换为无符号字符,以便可以将它们放入我的hexData数组中。抱歉,我原来的问题措辞很差,但是我不认为指向重复的问题能回答我的问题。

1 个答案:

答案 0 :(得分:0)

这是用十六进制表示字节值的方法

有用的格式说明符如下: %x-以十六进制形式输出,例如:2d .. %02x-用零填充,最少2个字符,例如:0e .. “ 0x%02x”表示形式:0x00。

void byte_to_hex_string(unsigned char decimal) // Print Hexadecimal
{
    if (decimal < 256)
    {
        char hexstring[8]{ 0 };
        sprintf(hexstring, "0x%02x", decimal);
        printf("%s\n", hexstring);
    }
}

int main()
{
    byte_to_hex_string('A');

    return 0;
}