2

这让我发疯。我是初学者/中级 C++er,我需要做一些看似简单的事情。我有一个包含很多十六进制字符的字符串。它们是从 txt 文件中输入的。字符串看起来像这样

07FF3901FF030302FF3f0007FF3901FF030302FF3f00.... etc for a while

如何轻松地将这些十六进制值写入 .dat 文件?每次我尝试时,它都会将其写入文本,而不是十六进制值。我已经尝试编写一个 for 循环来插入“\x”每个字节,但它仍然被写为文本。

任何帮助,将不胜感激 :)

注意:显然,如果我什至可以做到这一点,那么我对 c++ 了解不多,所以尽量不要在我的脑海中使用东西。或者至少解释一下。普威兹:)

4

1 回答 1

1

您应该清楚 char(ascii) 和 hex 值的区别。

假设在 x.txt 中:

ascii 读作:“FE”

在二进制中,x.txt 是“0x4645(0100 0110 0100 0101)”。在 ascii 中,'F'=0x46,'E'=0x45。

请注意,一切都是计算机以二进制代码存储的。

你想得到 x.dat:

x.dat 的二进制代码是“0xFE(1111 1110)”

因此,您应该将 ascii 文本转换为正确的十六进制值,然后将其写入 x.dat。

示例代码:

#include<iostream>
#include<cstdio>
using namespace std;
char s[]="FE";
char r;
int cal(char c)// cal the coresponding value in hex of ascii char c
{
    if (c<='9'&&c>='0') return c-'0';
    if (c<='f'&&c>='a') return c-'a'+10;
    if (c<='F'&&c>='A') return c-'A'+10;
}
void print2(char c)//print the binary code of char c
{
    for(int i=7;i>=0;i--)
        if ((1<<i)&c) cout << 1;
        else cout << 0;
}
int main()
{
    freopen("x.dat","w",stdout);// every thing you output to stdout will be outout to x.dat.
    r=cal(s[0])*16+cal(s[1]);
    //print2(r);the binary code of r is "1111 1110"
    cout << r;//Then you can open the x.dat with any hex editor, you can see it is "0xFE" in binary
    freopen("CON","w",stdout); // back to normal
    cout << 1;// you can see '1' in the stdout.
}
于 2013-05-09T05:05:25.643 回答