例如读取a.txt内容转化存储为c.dat
a.txt内容如下
1adcffa555
1dfacab555
c.dat内容如下
1a dc ff a5 55 1d fa ca b5 55
求Python或者c语言实现
你好,请问c.dat你是想输出成文本文件还是二进制文件?
不知道你的问题解决没有,下面的代码使用c语言来完成了你的需求,你参考一下
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp1 = fopen("a.txt", "r"); // 打开 a.txt 文件
FILE *fp2 = fopen("c.dat", "wb"); // 打开 c.dat 文件
char *str = NULL; // 存储从 a.txt 文件中读取的字符串
unsigned long long num; // 存储转换后的十六进制数
unsigned char byte; // 存储要写入到 c.dat 文件中的字节
int len = 0; // 存储字符串的长度
int ch; // 存储从 a.txt 文件中读取的字符
while ((ch = fgetc(fp1)) != EOF) { // 从 a.txt 文件中读取一个字符
if (ch == '\n' || ch == ',') { // 如果遇到换行符或逗号,表示一个字符串结束
str[len] = '\0'; // 在字符串末尾添加结束符
sscanf(str, "%llx", &num); // 将字符串转换为十六进制数
for (int i = len / 2 - 1; i >= 0; i--) { // 将十六进制数分成 len / 2 个字节
byte = (num >> (i * 8)) & 0xff; // 获取第 i 个字节
fwrite(&byte, sizeof(byte), 1, fp2); // 将字节写入到 c.dat 文件中
}
len = 0; // 重置字符串长度为零
} else { // 如果不是换行符或逗号,表示一个字符串还未结束
str = realloc(str, len + 1); // 分配 len + 1 大小的内存给 str
str[len] = ch; // 将字符存入 str 中
len++; // 增加字符串长度
}
}
if (len > 0) { // 如果最后一个字符串没有换行符或逗号,需要额外处理一次
str[len] = '\0'; // 在字符串末尾添加结束符
sscanf(str, "%llx", &num); // 将字符串转换为十六进制数
for (int i = len / 2 - 1; i >= 0; i--) { // 将十六进制数分成 len / 2 个字节
byte = (num >> (i * 8)) & 0xff; // 获取第 i 个字节
fwrite(&byte, sizeof(byte), 1, fp2); // 将字节写入到 c.dat 文件中
}
}
free(str); // 释放 str 所占用的内存
fclose(fp1); // 关闭 a.txt 文件
fclose(fp2); // 关闭 c.dat 文件
return 0;
}
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// 打开 a.txt 文件并读取内容
FILE* in = fopen("a.txt", "r");
char buffer[1024];
char* content = NULL;
size_t content_size = 0;
while (fgets(buffer, sizeof(buffer), in) != NULL) {
content = realloc(content, content_size + strlen(buffer));
strcat(content, buffer);
content_size += strlen(buffer);
}
fclose(in);
// 将内容转换为二进制数据
char* binary_data = (char*) malloc(strlen(content) / 2);
for (int i = 0; i < strlen(content); i += 2) {
sscanf(&content[i], "%2hhx", &binary_data[i / 2]);
}
// 将二进制数据写入 c.dat 文件
FILE* out = fopen("c.dat", "wb");
fwrite(binary_data, sizeof(char), strlen(content) / 2, out);
fclose(out);
free(content);
free(binary_data);
return 0;
}
```
可以借鉴下‘
file_name=r'/home/user/python/dataset/model_data5.txt'
file=open(file_name,'r')
data = file.read()#read the whole binary file to string
file.close()
data =data.replace('\n','').replace('\t','')
# data = data.expandtabs(0)可以将tab消去
# print(data)
file_name1 = "weight1.dat"
file1 = open(file_name1, 'w')
num=0
weight_len=9
i=0
# a='00001101'
# int_10=int(a,2)
# print(int_10)
# aaa=struct.pack("string", a)
# print(int(a))
while num<=len(data)-weight_len:
a=data[num:num+weight_len]
print(a)
data_bin=int(a,2)
print(data_bin)
# b=hex(int(a))[2:].zfill(9)
# file1.write(hex(b)[2:].zfill(4))
# print(b)
file1.write('@')
file1.write(hex(i)[2:].zfill(4))
file1.write('\n')
file1.write(hex(int(data_bin))[2:].zfill(8)) # zfill(8) stardard hex
file1.write('\n')
i+=1
num += 9
file1.close()
还没解决的话,待会我可以用c帮你实现
引用chatGPT作答,以下是一个Python实现的代码,它可以将a.txt文件中的每两行内容结合,将它们合并为一个字符串,并将其写入c.dat文件中。
with open("a.txt", "r") as f1, open("c.dat", "wb") as f2:
# 读取文件a.txt的内容
lines = f1.readlines()
# 将每两行内容合并为一个字符串
merged_lines = [lines[i].strip() + lines[i+1].strip() for i in range(0, len(lines), 2)]
# 将合并后的内容转换为二进制并写入文件c.dat中
for line in merged_lines:
f2.write(bytes.fromhex(line))
在此代码中,我们使用了Python中的open函数打开两个文件,一个是读取文件(a.txt),另一个是写入文件(c.dat)。然后,我们使用readlines函数读取a.txt文件的内容,并使用strip函数去掉每行末尾的换行符。接下来,我们将每两行内容合并为一个字符串,并使用fromhex函数将其转换为二进制。最后,我们将转换后的内容写入c.dat文件中,这里使用了write函数和bytes类型。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
以下是Python代码实现:
# 打开需要读取的文件和保存的文件
with open('a.txt', 'r') as f_read, open('c.dat.txt', 'w') as f_write:
# 读取文件内容
content = f_read.read()
# 将每两个字符组合在一起,以空格分隔
data = ' '.join([content[i:i+2] for i in range(0, len(content), 2)])
# 写入保存文件
f_write.write(data)
以上是将a.txt文件中的内容两两组合并保存为c.dat.txt文件的代码实现。如果需要将内容保存为二进制格式的.dat文件,可以使用以下代码:
# 打开需要读取的文件和保存的文件
with open('a.txt', 'r') as f_read, open('c.dat', 'wb') as f_write:
# 读取文件内容
content = f_read.read()
# 转换为二进制格式
data = bytes.fromhex(content)
# 写入保存文件
f_write.write(data)
以上代码实现了将a.txt文件中的内容转换为二进制格式,并以c.dat文件保存的功能。
如果我的回答解决了您的问题,请采纳!
以下是Python实现:
with open('a.txt', 'r') as f:
lines = f.readlines()
data = []
for i in range(0, len(lines), 2):
combined_line = lines[i].strip() + lines[i+1].strip()
byte_vals = bytes.fromhex(combined_line)
data.extend(byte_vals)
with open('c.dat', 'wb') as f:
f.write(bytearray(data))
首先,使用open()函数打开文件'a.txt'并读取所有行。然后,使用循环将每两行相加并转换为十六进制字节值,将结果存储在一个列表中。最后,使用open()函数创建文件'c.dat'并将字节数据写入该文件中。
GPT的参考
# 打开文件并读取内容
with open('a.txt', 'r') as f:
data = f.readlines()
# 将内容两两结合
new_data = ''
for i in range(0, len(data), 2):
new_data += data[i].strip() + data[i+1].strip()
# 将新内容写入dat文件
with open('c.dat', 'wb') as f:
f.write(bytes.fromhex(new_data))
GPT的参考
# 打开文件并读取内容
with open('a.txt', 'r') as f:
data = f.readlines()
# 将内容两两结合
new_data = ''
for i in range(0, len(data), 2):
new_data += data[i].strip() + data[i+1].strip()
# 将新内容写入dat文件
with open('c.dat', 'wb') as f:
f.write(bytes.fromhex(new_data))
Python 实现:
Python 实现:
Copy
with open('a.txt', 'r') as f1:
with open('c.dat', 'wb') as f2:
for line in f1:
hex_str = ''.join([hex(ord(c))[2:].zfill(2) for c in line.strip()])
f2.write(bytes.fromhex(hex_str))
C 语言实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 1024
int main() {
FILE *f1, *f2;
char line[MAX_LINE_LEN], hex_str[MAX_LINE_LEN * 2], *p;
int i, val;
f1 = fopen("a.txt", "r");
f2 = fopen("c.dat", "wb");
while (fgets(line, MAX_LINE_LEN, f1)) {
p = hex_str;
for (i = 0; i < strlen(line); i++) {
val = (int)line[i];
sprintf(p, "%02x", val);
p += 2;
}
fwrite(hex_str, strlen(hex_str) / 2, 1, f2);
}
fclose(f1);
fclose(f2);
return 0;
}
这两个实现的思路基本相同,都是先读取 a.txt 文件中的每一行,然后将每个字符转化为对应的 16 进制字符串,最后将所有的 16 进制字符串拼接在一起,再将其转化为字节流写入 c.dat 文件中。
这里提供一个Python实现的方法,可以将a.txt中的内容两两结合后存储为c.dat:
with open("a.txt", "r") as file:
content = file.read().strip()
pairs = [content[i:i+2] for i in range(0, len(content), 2)]
with open("c.dat", "w") as file:
file.write(' '.join(pairs))
以下是C语言实现的方法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *input, *output;
char input_filename[] = "a.txt";
char output_filename[] = "c.dat";
char c;
char buffer[3] = {0};
int count = 0;
input = fopen(input_filename, "r");
if (input == NULL) {
printf("Error opening %s\n", input_filename);
exit(1);
}
output = fopen(output_filename, "w");
if (output == NULL) {
printf("Error opening %s\n", output_filename);
fclose(input);
exit(1);
}
while ((c = fgetc(input)) != EOF) {
buffer[count++] = c;
if (count == 2) {
buffer[count] = '\0';
fprintf(output, "%s ", buffer);
count = 0;
}
}
fclose(input);
fclose(output);
return 0;
}
这段代码分别使用Python和C语言实现了将a.txt中的内容两两结合后存储为c.dat的功能。