Java 和 C 通讯时的字节转换问题

caicai 2000-02-16 11:02:00
Java 和 C 一起编写C/S程序。在网络传输的过程中,是不是需要进行高低字节的转化?是不是只有在传输int等数据类型的时候才需要?
ASCII的字符需要吗?
如果是两字节的中文编码字符呢?
如果是long double 等大于两个字节的数据类型呢?
...全文
313 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
caicai 2000-02-18
  • 打赏
  • 举报
回复
岂不是不同长度的数据类型,在传输的时候需要不同的转换?
比如c/c++在x86环境中,和java通讯,必须知道传过来的具体的内容含义,如何切分数据
网络传输的应用难道都要做切分数据的工作吗?

二进制编码顺序,可否细讲讲?
sintony 2000-02-17
  • 打赏
  • 举报
回复
传输时的顺序是指二进制编码的顺序,而非字符、数值的本身的顺序。
netmare 2000-02-17
  • 打赏
  • 举报
回复
所有大于两个字节的数据类型都有此问题,用beck的方法即可解决
netmare 2000-02-17
  • 打赏
  • 举报
回复
其实数据的顺序是由cpu决定的,与操作系统无关
如intel x86结构下,short型数0x1234表示为34 12,int型数0x12345678表示为78 56 34 12
如ibm power pc结构下,short型数0x1234表示为12 34,int型数0x12345678表示为12 34 56 78
由于这个原因不同的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同power pc那样的顺序
caicai 2000-02-17
  • 打赏
  • 举报
回复
谢谢,转化的方法我基本明白了,
可否再给个分析,windows的c/c++下,2各字节以上的数据,在转换的时候,
是怎样的顺序变幻的。尤其是4各字节的:long 4321->1234还是3412还是2143?
不太清楚标准的unix网络字节和window中的高地位顺序。
我想这个问题很多人都有兴趣的。
哪位大虾系统的解答一下?谢谢先。
如果你想要几分的话,这里不够的话,还可以吧java版的50分送上。:)
sintony 2000-02-16
  • 打赏
  • 举报
回复
说的对,两字节的中文编码字符处理起来是有点麻烦,不是有些乱麻
不过现在有这个函数就没事了

//函数ToUnicodeAndOut的定义 start
#ifndef MAX_UNICODE_WIDTH
#define MAX_UNICODE_WIDTH 1024+1024
//第一个1024是URL的可能最大长度,第二个1024是TITLE部分允许的最大长度
#endif
//函数ToUnicodeAndOut(LPCSTR szSrcOEM)
//用于将一个字符串转化为Unicode然后输出
//第一个参数"LPCSTR szSrcOEM"是待转化的字符串
//成功与否都返回0
int ToUnicodeAndOut(LPCSTR szSrcOEM)
{
int i,iResult,iLen;
wchar_t outBuff[MAX_UNICODE_WIDTH];

iLen = strlen(szSrcOEM);
iResult = MultiByteToWideChar(CP_OEMCP,NULL,szSrcOEM,iLen,outBuff,MAX_UNICODE_WIDTH);
//调用API进行转化
for( i=0;i<iResult;i++)
{
outBuff[i] = htons(outBuff[i]); //转化为网络字节顺序
}
fwrite(outBuff,iResult*2,1,stdout);
return 0;
}
//函数ToUnicodeAndOut的定义 end

这是朋友帮我的,于你共享吧
beck 2000-02-16
  • 打赏
  • 举报
回复
因该诗作网络顺序和主机顺序的转换吧
ntohs htons ntohl htonl

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧