Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Io 如何在Lua中读取C生成的二进制文件_Io_Lua - Fatal编程技术网

Io 如何在Lua中读取C生成的二进制文件

Io 如何在Lua中读取C生成的二进制文件,io,lua,Io,Lua,我想读取另一个程序提供的32位整数二进制文件。该文件只包含整数,不包含其他字符(如空格或逗号)。读取此文件的C代码如下所示: FILE* pf = fopen("C:/rktemp/filename.dat", "r"); int sz = width*height; int* vals = new int[sz]; int elread = fread((char*)vals, sizeof(int), sz, pf); for( int j = 0; j < height; j++ )

我想读取另一个程序提供的32位整数二进制文件。该文件只包含整数,不包含其他字符(如空格或逗号)。读取此文件的C代码如下所示:

FILE* pf = fopen("C:/rktemp/filename.dat", "r");
int sz = width*height;
int* vals = new int[sz];
int elread = fread((char*)vals, sizeof(int), sz, pf);
for( int j = 0; j < height; j++ )
{
    for( int k = 0; k < width; k++ )
    {
        int i = j*width+k;
        labels[i] = vals[i];
    }
}
delete [] vals;
fclose(pf);
我尝试了一个将字节转换为整数的函数,我的代码如下:

row = image_size(1);
colomn = image_size(2);
fid = fopen(data_path,'r');
A = fread(fid, row * colomn, 'uint32')';
A = A + 1;
B = reshape(A,[colomn, row]);
B = B';
fclose(fid);
function bytes_to_int(b1, b2, b3, b4)
      if not b4 then error("need four bytes to convert to int",2) end
      local n = b1 + b2*256 + b3*65536 + b4*16777216
      n = (n > 2147483647) and (n - 4294967296) or n
      return n
end

   local sup_filename = '1.dat'
   fid = io.open(sup_filename, "r")
   st = bytes_to_int(fid:read("*all"):byte(1,4))
   print(st)

   fid:close()

但它仍然无法正确读取此文件。

您只调用了一次
字节到int
。你需要为你想读的每一个
int
调用它。e、 g

fid = io.open(sup_filename, "rb")
while true do
  local bytes = fid:read(4)
  if bytes == nil then break end -- EOF
  local st = bytes_to_int(bytes:byte(1,4))
  print(st)
end

fid:close()

这是一个二进制文件。您需要在
io中使用
'rb'
。open
@Roddy我试图添加这个,但输出总是一个0,输出应该是一个整数序列。