我有一个程序来接收文件的内容并将其转换为十六进制。我想获取这些十六进制值并将它们存储为我称为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数组中。抱歉,我原来的问题措辞很差,但是我不认为指向重复的问题能回答我的问题。
答案 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;
}