通过套接字,我将信息从一个用C编写的程序发送到一个用Java编写的程序。
通过用C语言编写的程序,我通过char数组发送两个字节(使用internet套接字),并且接收到的Java信息也存储在char数组中。
我的主要问题是Java数组中接收的信息与从C程序传输的信息不能正确对应。
我读到Java中的字符长度为16位,而C语言中的字符长度为8位。这可能就是问题所在,但我不知道如何处理/解决它。
发送信息的C代码如下:
char buffer[256];
bzero(buffer,256);
n = read(fd, buffer, 255); // getting info from an
我需要将二进制数据(文件中的红色)从java传递到c++ (使用jni),因此我有一个期望字符串的C++函数(因为c++字符串中只是char数组)。
我使用以下代码在java中读取二进制文件:
byte[] buffer = new byte[512];
FileInputStream in = new FileInputStream("some_file");
int rc = in.read(buffer);
while(rc != -1)
{
// rc should contain the number of bytes read in this operation.
当我们看一下一些基本的数据类型,比如char和int,我们知道char只是一个无符号字节(取决于语言),int只是一个有符号的dword,bool只是一个只能是1或0的char,等等。我的问题是,为什么我们在编译语言中使用这些类型,而不是仅仅声明一个byte、dword等类型的变量,因为一旦你区分了有符号数据和无符号数据以及浮点数据,上面提到的类型的操作几乎是一样的?
为了扩展问题的上下文,在C语言中,if和while语句可以接受布尔值作为输入,该布尔值通常存储为char,这排除了显式布尔类型的需要。
在实践中,这两段代码在二进制级别上应该是等价的:
int main()
{
int
我有以下CRC函数:
unsigned long Checksummer::crc32 (unsigned long crc, char *buf, unsigned long len)
{
unsigned long crc_table[256];
int i, k;
for (i = 0; i < 256; i++) {
unsigned long c = (unsigned long) i;
for (k = 0; k < 8; k++)
c = c & 1 ? 0xedb88320 ^ (c >&g
下面是一个例子:
struct field
{
unsigned int a : 8;
unsigned int b : 8;
unsigned int c : 8;
unsigned int d : 8;
};
union test
{
unsigned int raw;
field bits;
};
int main()
{
test aUnion;
aUnion.raw = 0xabcdef;
printf("a: %x \n", aUnion.bits.a);
printf("