java与C++通讯
文章平均质量分 68
如果可以我愿争取
本人自学能力强,思维敏捷,对于新知识接受快,勇于面对困难,敢于挑战;为人诚恳,待人真诚,具有良好的团队合作精神和沟通组织能力,工作积极上进;
展开
-
java实现对无符号整数的支持
package cn.miw.hp.test;public class ToUnsigned {public static long getUnSignedLong(long l) {return getLong(longToDword(l), 0);}// 将long型数据转换为Dword的字节数组(C/C++的无符号整数)private static b转载 2012-08-30 09:19:40 · 4094 阅读 · 0 评论 -
ByteBuffer 类
Buffer 类定义了一个可以线性存放primitive type数据的容器接口。Buffer主要包含了与类型(byte, char…)无关的功能。值得注意的是Buffer及其子类都不是线程安全的。每个Buffer都有以下的属性:capacity这个Buffer最多能放多少数据。capacity一般在buffer被创建的时候指定。limit在Buffer上进行的读写操作转载 2012-09-22 08:46:43 · 1393 阅读 · 0 评论 -
java 与C++ 数据类型大小
Java中数据类型大小:原始类型对应的包装类型默认值存储格式数据范围shortjava.lang.Short02个字节-32,768到32767intjava.lang.Integer04个字节-原创 2012-09-21 15:52:37 · 510 阅读 · 0 评论 -
java读取C++结构体,类型转换
package com.struct.method;import java.io.EOFException;import java.io.FilterInputStream;import java.io.IOException;import java.io.InputStream;//参见java.io.DataInputStream//C++写入的字节顺序是从低到转载 2012-09-22 08:20:40 · 5233 阅读 · 0 评论 -
ByteBuffer用法小结
在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer.因此ByteBuffer的用法是有必要牢固掌握的.1.创建B转载 2012-09-22 08:44:35 · 602 阅读 · 0 评论 -
C++之字节对齐与结构体大小
说明:结构体的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。这些问题在平时编程的时候也确实不怎么用到,但在一些笔试面试题目中出是常常出现,一、解释现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在转载 2012-09-22 09:50:43 · 577 阅读 · 0 评论 -
C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
//从网络中读取C的无符号int,short,byte字节数组,相应转换成java的long,char,short short anUnsignedByte = 0; char anUnsignedShort = 0; long anUnsignedInt = 0; int firstByte = 0; int secondByte = 0转载 2012-09-22 13:52:49 · 1272 阅读 · 0 评论 -
MappedByteBuffer的使用
其实掌握MappedByteBuffer并不难,只要记住“三方三法三特性”(我自己总结的,呵呵~~不要扔鸡蛋哦。。。)这句话就可以轻松搞定!MappedByteBuffer 只是一种特殊的 ByteBuffer ,即是ByteBuffer的子类。 MappedByteBuffer 将文件直接映射到内存(这里的内存指的是虚拟内存,并不是物理内存,后面说证明这一点)。通常,可以映射整个文件,如果文件比转载 2012-09-22 09:33:02 · 608 阅读 · 0 评论 -
java的int、char、long、float、double对byte的转换,在通信的时候会用到
/** * java的int、char、long、float、double对byte的转换,在通信的时候会用到 * * 文件名称: com.born.util.ByteUtil.java * 文件描述: byte转换工具 * 版权所有: 版权所有(C)2001-2006 * 公 司: bran * 内容摘要: * 其他说明: * 完成日期:转载 2012-09-24 10:12:40 · 905 阅读 · 0 评论 -
java和C结构体通信
主要是看代码分析别人写的发送结构体思路,如内存补0操作:package com.cvicse.naba.service.impl.user;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * * * 描转载 2012-09-25 09:50:12 · 1295 阅读 · 0 评论 -
java对象内存占用情况分析
一个对象实例占用了多少字节,消耗了多少内存?这样的问题在c或c++里使用sizeof()方法就可以得到明确答案,在java里好像没有这样的方法(java一样可以实现),不过通过jmap工具倒是可以查看出一个对象的占用内存的大小,这里介绍一种通过分析java代码计算内存使用情况的方法。注意,一下讨论的情况都是基于32位机,不适用用64位机,JVM是sun的HotSpot,不同的虚拟机实现可能会不转载 2012-09-24 15:37:14 · 623 阅读 · 0 评论 -
Socket网络通讯开发总结之:Java 与 C进行Socket通讯
先交待一下业务应用背景:服务端:移动交费系统:基于C语言的Unix系统客户端:增值服务系统:基于Java的软件系统通迅协议:采用TCP/IP协议,使用TCP以异步方式接入数据传输:基于Socket流的方式,传输的是网络字节序Java Socket通讯实现方式这里不做过多的描述,网上到处可以搜索到,比较简单,这里要说的是Java 与 C 进行Socket通讯需注意的地方:转载 2013-09-16 14:14:01 · 741 阅读 · 0 评论 -
Java和C/C++程序实时通讯数据移植问题的研究
简介: 摘要:本文研究了数据存储格式中大尾小尾问题,根据此原理解决了Java程序和C/C++通讯及读取服务器端文件时的数据移植问题。问题起源该问题起源于笔者设计的基于Web的远程测控系统。它的基本原理是:服务器端运行一VC编制的服务器程序,客户端使用Java applet;VC服务器程序接收到Java applet发送的命令后,采集各种信息,并将所有数据发向applet,实现了基于Web的转载 2013-09-16 15:25:57 · 1058 阅读 · 0 评论 -
Java与C底层数据类型转换
前段时间一直忙着做J2EE服务器与C++客户端的项目。终于,项目告一段落,有一些收获 在这里与大家分享。Java代码 import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputSt转载 2013-09-16 15:53:04 · 1205 阅读 · 0 评论 -
Socket心跳包机制 .
心跳包的发送,通常有两种技术方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一个低级别的线程,在该线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,即认为客户端已经掉线;同样,如果客户端在一定时间内没 有收到服务器的心跳包,则认为连接不可用。方法转载 2013-09-17 09:15:56 · 683 阅读 · 0 评论 -
JAVA里16进制和字节数组互转
大括号理的就是一个byte类型的数组,里面是3个byte类型那个的数 public static String stringToHexString(String strPart) { String hexString = ""; for (int i = 0; i < strPart.length(); i++) { int ch = (int) strPart.转载 2013-09-25 10:44:58 · 893 阅读 · 0 评论 -
java怎样调用DLL方法
前段时间项目需要使用调用DLL来控制POS机外设,如钱箱和小票打印机、顾客显示屏等,于是,我便开始了java调用DLL中的方法的探索,事实上,网上的例子还是很多的,一些外部包的例子也有很多,但每个人的实际情况都有所不同,尽管只是一个很简单的调用,也花了我不少时间,在这里分享一下我的经验吧。 我是通过一个外部的JAR包来间接来获得DLL文件的句柄 的,它就是jacob了,这是java co转载 2013-11-05 10:39:31 · 1028 阅读 · 0 评论 -
Java向C++发送结构体
最近给个朋友做个网站的客户端,使用C/S模式,Client为VC6开发,Server为Java,通过Socket通信。由于Client这边为C++,所以,在接受Java发过来的数据包时,需要知道发来的包的长度,所以,就要引入变长包的机制。方法是:首先Server发送一个包头,如下:// packet headtypedef struct tagPacketHead{long Pac转载 2012-09-21 16:33:21 · 1550 阅读 · 0 评论 -
理解有符号数和无符号数的区别
理解有符号数和无符号数回头看上一节,我们所讲的数都是正数。同样是年纪和工资,前者不需要有负值,但后者可能需要——至少所有的老板都这样认为。那么,负数在计算机中如何表示呢?这一点,你可能听过两种不同的回答。一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再者,用“补码”表示负数,其实一种公式转载 2012-09-21 16:08:34 · 2819 阅读 · 1 评论 -
Java中byte与16进制字符串的互相转换
Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。即byte用十六进制表示只占转载 2012-09-05 16:17:47 · 543 阅读 · 0 评论 -
java与c/c++进行socket通信的一些问题
c/c++和java通信的问题比较多,特别是c特有的数据结构(如struct)。特地根据网友的一个问题举个例子,希望对初学者有所帮助。这类问题通常是为了利用原有Server或者Server不能做修改(通常是c/c++)造成。比如Server端只接收一个结构Employee,定义如下:struct UserInfo { char UserName[20]; int Use转载 2012-08-29 15:49:11 · 1371 阅读 · 0 评论 -
C与java通讯小结
最近在做java和c的UDP通信,才发现自己的通信基础知识基本为0,汗一个。。不过还好,在大家的帮助下,终于完成了。。下面写下一些小的总结。(1)字节序问题:这个是通讯的大问题。。前面几篇文章也转载了查阅到的一些资料。总的来说C一般使用的是小尾存储数据,而java使用大尾存储,所谓大尾存储就是数据高字节在前,低字节在后存储。而网络中的数据则都是大尾存储。另字符串在传输过程中不会发生变化,而in转载 2012-08-29 15:57:14 · 756 阅读 · 0 评论 -
深入解析JNA—模拟C语言结构体
原帖:http://blog.csdn.net/shendl/article/details/3599849 深入解析JNA—模拟C语言结构体前言前几天写《JNA--JNI终结者》一文介绍JNA框架。写完之后才发现,忘了写比较有难度的C语言Struct的模拟了。今天就补上这篇文章,介绍Struct。不写怎样模拟C语言结构体,就不能算是真正解决了调用动态链接库的问题。C语转载 2012-08-30 15:05:13 · 1272 阅读 · 0 评论 -
Java与C底层数据类型转换
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;/** * 仅仅适用于 Java 与 C++ 通转载 2012-08-31 15:00:20 · 802 阅读 · 0 评论 -
Java实现结构体,让字节流封送简单起来
和C/C++不同,Java中没有结构体,联合体。这是Java作为高级语言的进步,但也使得它在进行网络字节流封送上显得捉襟见肘。这里所指的是在进行网络编程,串口编程等需要和某些C语言中结构体形式定义的协议接口进行通讯时,Java由于缺乏结构体和字节数组之间的有效转换方法,所带来的编程上的困境。按照通常的想法,我们需要自己去手动的一个字节,一个字节的拼凑,来实现C语言中结构体定义的数据包。在面转载 2012-08-30 18:02:38 · 840 阅读 · 0 评论 -
内存对齐
内存对齐一、背景首先我想对“对齐”这个名词做一个自己的理解,我认为对齐不是从静态意义上来说的,而是从动态意义上来说的,是相对于CPU读取过程来说的。所谓对齐就是CPU读取某个变量时,使CPU读取的次数最少的内存排列方式。比如就拿32位(4字节)系统来说,long类型的数据CPU读取一次就能完成读取的,说明此数据是对齐的,如果读取两次才读取完成,说明是未对齐的;double数据类型的数据转载 2012-08-31 09:54:00 · 356 阅读 · 0 评论 -
java接收c语言的结构体
java接收c语言的结构体DataInputStream inputStream = new DataInputStream(s.getInputStream());int read = 0;if (inputStream != null) { read = inputStream.read(buf);}if (read == -1) { b转载 2012-08-31 10:55:40 · 3286 阅读 · 0 评论 -
JNI之C语言简单回顾
JNI之C语言简单回顾一.C语言基本数据类型: c语言中 char, int, float, double, signed, unsigned, long, short and void// java 中的8大本数据类型和他们的长度 // byte 1 char 2 short 2 int 4 long 8 double 8 float 4 boolean 1// 在转载 2012-08-31 11:26:51 · 637 阅读 · 0 评论 -
java调用c dll,指针参数和结构体参数搞定
基于上两篇java调用dll的文章,我做了更为复杂的参数传递,指针变量和结构体变量,下面给出源码vc++中的工程名称是SMSXIAOSource Files(源文件):.c文件名:sms.c源码:#include "sms.h" int SmsInit(void) { printf("welcome"); return 1; } int S转载 2012-08-31 13:25:46 · 2702 阅读 · 0 评论 -
使用DLL进行不同语言之间的调用
__declspec(dllexport)是告诉编译器用来导出函数的,在代码中不另作说明了extern "C"的意思就是用C的方式来导出函数,为什么要用C的方式来导出呢.因为C++中有重载,编译器会对函数名进行更改,修饰成唯一的函数名.__stdcall告诉编译器函数调用方式.这点可以参考其他文章,我预计也会在blog中写上一篇关于函数调用方式.复制内容到剪贴板代码:转载 2012-08-31 13:32:28 · 636 阅读 · 0 评论 -
java与c/c++进行socket通信的一些问题(2)
import java.net.*;import java.io.*;/** * 与C语言通信(java做Client,c/c++做Server,传送一个结构) * @author kingfish * @version 1.0 */public class Employee2 { private String name; private int id;转载 2012-08-31 13:36:12 · 1210 阅读 · 0 评论 -
字节对齐的作用
学ARM体系结构的时候碰到了字节对齐的问题,当时没觉得是个什么重点,但后来看到了一个例子,发现自己的概念很模糊,就好好看了一下字节对齐的作用。 在现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序转载 2012-08-31 13:43:44 · 405 阅读 · 0 评论 -
利用JNative实现Java调用动态库
由于项目要求,需要用Java调用windows的dll文件,查了一下,如果用JNI的话是比较麻烦的,在sourceforge.net上搜索了一下 “Java dll”,首先出现的是Jnative,于是决定用它,后来也试了些别的,但还是JNative好使,简单总结如下:Java调用动态库所需要关心的问题: l 如何装载dll文件,以及如何定位所要使用的方法;转载 2012-08-31 14:04:24 · 487 阅读 · 0 评论 -
JAVA 串口编程(二)
三、实例(1)打开、关闭串口首先使用CommPortIdentifier中的方法,获取可用的端口,并且选择一个端口打开作为通信端口。A:枚举可用端口 1 void listPortChoices() 2 {3 CommPortIdentifier portId;4 Enumeration e转载 2012-09-01 18:26:55 · 617 阅读 · 0 评论 -
JAVA 串口编程 (一)
一、环境配置(1)解压复制文件解压javacomm20-win32.zip把win32com.dll复制到/jre/bin 和/bin目录下把comm.jar复制到/jre/lib/ext和/lib目录下把javax.comm.properties复制到/jre/lib和/lib目录下(2)设置环境变量CLASSPATH=/jre /lib/ext /comm.jar;转载 2012-09-01 18:28:23 · 597 阅读 · 0 评论 -
JAVA 串口编程 (三)
四、实例分析同API一起下载的还有一个examples文件,里面有个最简单的读、写程序,对其进行注释,以增进了理。(1)读串口 1 import java.io.*;2 import java.util.*;3 import javax.comm.*;4 5 public class Simple转载 2012-09-04 15:40:47 · 713 阅读 · 0 评论 -
Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutputStream用法)
Java字节序http://origin100.iteye.com/blog/267165 /*** 通信格式转换** Java和一些windows编程语言如c、c++、delphi所写的网络程序进行通讯时,需要进行相应的转换* 高、低字节之间的转换* windows的字节序为低字节开头* linux,unix的字节序为高字节开头* java则无论平台变化,转载 2013-11-11 11:03:37 · 728 阅读 · 0 评论