如何从二进制标准的指针创建具有十六进制信息(作为char)的文件
How to create a file with hexadecimal information (as char) from a pointer in binary standard?
我正在尝试创建一个文件,从指针中获取二进制条目,但我在转换时遇到了一些问题。
我的功能是:
pSec
指向包含我要写入的信息的第一个地址。
int StoreFile::setK(unsigned int Slot, void* pSec, unsigned int Len) {
int Ret = 0;
char tLen[sizeof(Len)];
char cSec[Len*2], *Sec;
static char FName[fs_PathMaxLg];
snprintf(FName, sizeof(FName)-1, "%s/Store.INI", _Dir);
static char Section[2][20];
snprintf(Section[0], sizeof(Section[0])-1, "%lu_SIZE", Slot);
snprintf(Section[1], sizeof(Section[1])-1, "%lu_DATA", Slot);
do {
在这里,我尝试检查所有地址,将信息传递给char*
,但我希望该信息以十六进制形式出现(具有十六进制内容的char
数组),但我没有成功地从指向char
的地址传递信息。
BYTE *ptr = (BYTE*)pSec;
for (int i = 0; i != Len; i++) {
Sec = strdup((const char*)ptr[i]);
// snprintf(Sec, 2, "%2.2x", ptr[i]);
// cSec = (char*)pSec;
// pSec += 1;
Sec += 2;
}
snprintf(tLen, sizeof(Len), "%x", Len);
这是另一个将字符数组写入文件的函数,只有在写入Sec
时才会出现问题。
Ret = WriteProfile(FName, "STOCK", Section[0], tLen);
if (Ret != 1) {
break;
}
Ret = WriteProfile(FName, "STOCK", Section[1], Sec);
if (Ret != 1) {
break;
}
Ret = 0;
} while(0);
你有什么建议来改进这个代码吗?我已经尝试了很多东西
所以中心部分是将二进制数据转换为十六进制表示。
由于一个字节转换为两个十六进制数字,因此一个十六进制数字等于4个二进制位。所以你必须分别转换一个字节的高4位和低4位。
假设您想将n
字节从data
转换为字符串s
,您可以这样做:
// convert lower 4 bit to hex
char byte2hex(char byte) {
byte &= 0x0f;
if (byte >= 10) {
// a-f
return byte + 'a' - 10;
} else {
// 0-9
return byte + '0';
}
}
string bin2hex(const char *data, int n) {
string s;
for (int i = 0; i < n; ++i) {
s.push_back(byte2hex(data[i]>>4));
s.push_back(byte2hex(data[i]));
}
return s;
}
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何在C++中将十六进制字符串转换为文本数据
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- 绝对编码器十六进制输入
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- C++17 十六进制浮点文字单精度后缀冲突?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 打印十六进制字符
- 如何从二进制标准的指针创建具有十六进制信息(作为char)的文件