VHDL does not have built in capability to read binary files, do Verilog and SystemVerilog have it?
I have never tried it so I just opened my little System Verilog Golden Reference Guide for the exact syntax. I found a description of $fopenbut I also found some corrections I made to the text. 

$fopen( "filename" ,  "mode [b] [+] ");

mode can be r (read), w (write), a(append).
 b is for binary
the final + is open for read and write.

fd = $fopen("example","rb+");


The following worked for me returning 0x0, 0x01 .. 0xFF from a 256 byte test file:

reg [7:0] binv;
integer fd;
integer loop;

   initial
   begin
     fd = $fopen("C:\\tmp\\hex256.bin","rb");
     if (fd==0)
     begin
        $display("Could not open file '%s'","c:\\tmp\\test.bin");
        $stop;     
     end

     for (loop=0; loop&lt;256; loop=loop+1)
     begin
        binv = $fgetc(fd);
        $display("0x%02X",binv);
     end
   end


I also had a quick test leaving the 'b' out. The reading goes from 0x00..0x19. After that it produces 0xFF. I interpret from that, that 0x1A (Control-Z) is seen as an EOF. However, as that is a Windows/DOS feature, it might well be that on a Unix/Linux system the program would even work in text mode. I would still use "rb" as it makes it compatible and also make clear to other readers of your code, that you are working with binary files