gpt4 book ai didi

c - Dlang 字符串到 char * 的转换

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:10 24 4
gpt4 key购买 nike

我从 bin 文件中读取了这段代码。数据保存在一个结构数组中并以 null 结尾我的目标是读取用 c 代码编写的数据 write (filehandle, (char *)arrayOfCELLs, sizeof(arrayOfCELLs);到一个文件,到相同的结构 arrayOfCELLs 使用 D.

我的问题是,在 c 中,我通过转换为 (char *) 将文件读入结构 arr[]

read(filehandle, (char *)arrayOfStructs, sizeof(arrayOfStructs)

在 D 中我通过 rcorre 找到了这让我找到了rawRead

auto buffer = FileHandle.rawRead(arrayOfStructs)

缓冲区获取数据到 arrayOfStructs 大小的位置。

但是,我的问题来了,缓冲区似乎得到了原始数据,包括 nulltermination 但都位于接收数组的 [0] 中,而且,我不明白/不知道它是什么数据类型(CELL[] 或字符串[]或.....

struct CELL{ char [20] name, int sect, int type ...};
struct CELL [50] arrayOfCELLs;
auto buffer = ..rawRead(arrayOfCELLs)

接收到的缓冲区中的数据是(部分)这个

[CELL("TEST\0feed\0\0\0\0\0\0\0\0\0\0\0", 1, 1,

第一个是名称,“TEST”,后跟空终止符,然后是 sect = 1, ptyp = 1 。现在第二个 CELL 持有这个

CELL("\x01\0\0\0\x02\0\0\0N\0\0\0\x04\0\0\0\x02\0\0\0", 65656, 655375,

那都是错的,应该是“test”和2,1,如果我在终端做一只猫,我会得到

anders$ cat cellspec
TESTfeedOx
atestTailingNx
aOF2 cycl primO?

问题,请问这是为什么,我该怎么做才能让它正确?

最佳答案

我发现了转换的问题所在。C中的long和unsigned long在Dlang long和ulong中大小不一样

解决方案/结论是当在 D-lang 中编码并在文件中使用 C 类型的数据时,为了获得正确的读取,需要注意 D-lang 类型的大小可能不等于 C 的大小。在我的例子中,代码更改为使用 c_long 和 c_ulong 来获得正确的读数。之后一切都很好地读取数据。快乐的日子

关于c - Dlang 字符串到 char * 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com