Let's try to break the problem into pieces.
But read() reads returns characters and that would mean it would return the character representation of the number. ... can I setup read differently?
The read() system call reads bytes from a file or raw stream without any interpretation or change. It is the appropriate way to read raw binary data.
Or should I printf some way to make the number show up not the character symbols? Like printing the hex or octal equivalent.???
Let's put the problem of how to output the numbers from the host program to one side for a moment, and focus on getting the data across correctly. It may be correct to printf() each 24-bit value, but that depends on what needs to happen to the data once the program has got it.
Fgetc() fputc() both have characters defined in their name is their a one for 8 bit numbers?
The names may be causing some confusion. fgetc() and fputc() both handle a byte (fgetc() can return a non-byte value to signal end of file or an error, too), so they are the ones for 8 bit numbers.
I think when I set a character to a number it does a character to number conversion.
read(), write(), fgetc() and fputc() should not change the binary representation of values written or read from a stream once the stream is set to 'raw' on a normal operating system. So no, if you Serial.print(value, BYTE) the number 0x30, it will not be converted, but will be sent as the byte with hexadecimal value 0x30.
I think I tried this with the button being what is sent up the maples port that button should be on arduinos. So it printed 1 and 0 instead of 48... the same happens if I toggle the lowest data bit on the usb1232h module with the ft2232h chip on it.
I'd need to understand what all of the parts in the stream were to give an answer. A conversion may have happened, or not.
I read here that I am reading charactrers as if I am reading a file...
http://www.cprogramming.com/tutorial/cfileio.html
That is correct. Reading and writing characters is reading and writing bytes.
Binary Output: For binary File Output you use fread.
For FILE* output, you'd use fwrite(), but I think I understand what you mean. fread() and fwrite() work for FILE*.
But open() does not return a FILE*, it returns a file descriptor (a small integer, which the Operating system uses to keep track of the underlying file).
I don't think you need to change to using FILE*. You can use open() and read() to get the data into the host program.
so you can see how if it trys to read 64 and the device sent 64 that would match up over time.
Don't focus on the most efficient size to do the transfer. Try to get the program working correctly first. The underlying operating system will be handling buffers, and should smooth things out.
Try to focus on getting the data blocks communicated correctly, and decode it into something easier to use.
I'd recommend finding a way to slow down the data rate so that it is easy to test, and ensure everything works correctly.