网络字节顺序 流操作
以前的一个基于SOCKET的报文传输项目,让我知道了什么叫网络字节顺序。在C函数中,有一系列函数支持,如:htons函数(host to net )见:winsock.h。总的意思是:不同的操作系统对 long , doulbe 等的内码字节顺序存储不一样。因此,一般情况下需要转为统一的网络字节顺序才在网络中传输。如:对两个字节长度的整型,使用java转为网络字节顺序的代码为:
public static byte[] hexToNet(int i) {
byte[] bt = new byte[2];
bt[1] = (byte) (i & 0xFF); // 底8位
bt[0] = (byte) ( (i >> 8) & 0xFF); // 高8位。
return bt;
}
---------------------------------
周二,我们又碰到了基于TUXEDO的CARRY类型的报文传输。其中要把某位字节值填上0x80。我想使用log4j把这值输出到文本文件来查看。于是使用 new String(b)后输出,使用UltraEdit-32 打开这个日志文本文件,查看ASCII码,发现是:0x3f。而不是想要的0x80
----------------------------------
使用C来写,是对的,代码如下:
// mytest.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
int main(int argc, char* argv[])
{
FILE *fp = fopen("D://my.txt", "a");
unsigned short us1 ;
us1 = (unsigned short)strlen("PLC001") | 0x08000;
u_short us = htons(us1);
printf("(short)strlen(/"PLC001/") | 0x08000 =%d/n",us1);
fprintf(fp,"%s",&us,sizeof(u_short));
fclose(fp);
return 0;
}
------------------------------------------------------------------------------
后来经朋友指点,要使用流来输出,而不是log4j的输出。才解决了这个问题:
FileOutputStream fos = null;
File myFile = new File("D://test.txt");
byte[] b = new byte[1];
b[0] = (byte)0x80;
try{
if (!myFile.exists()) {
myFile.createNewFile();
}
fos = new FileOutputStream(myFile);
fos.write(b);
}
catch (Exception e) {
e.printStackTrace();
}
这时看日志文件,才看到想要看到的结果:0x80
-------------------------------------------------------------------------------
感悟:对java,对字节流处理的基础功课,还真得补一补!
今天,分析了一下 TUXEDO的CARRY ,其实也是由 byte[]组成的。因此,在网络传输中,肯定也是以 socket的DataOutputStream之类的来 wrrite(byte[])。
网络字节顺序 流操作相关推荐
- 【转】大端模式与小端模式、网络字节顺序与主机字节顺序 (经典)
大端模式与小端模式 一.概念及详解 在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式. 先回顾两个关键词,MSB和LSB: ...
- java8的stream流操作的数据结构
在java8的流操作中分为终止符和非终止符. 非终止符不会触发数据的处理. 每次通过stream()方法新建立一个流的时候都会创建一个Head类.这个类是ReferencePipeline的一个内部类 ...
- 大端模式、小端模式、网络字节顺序与主机字节顺序
大端模式.小端模式.网络字节顺序与主机字节顺序 大端模式与小端模式 概念与详解 在各种体系的计算机中通常采用的字节存储机制主要有两种:big-endian和little-endian,即大端模式和小端 ...
- 吃透JAVA的Stream流操作,多年实践总结
在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理. 例如,现在有这么一个需求: 从给定句子中返回单词 ...
- Java流及流操作示例
转自公众号:后端技术精选 流 此处的流(Stream)与io中的输入流(InputStream)与输出流(OutputStream)是不同的概念,与实时处理数据的流也是不同的概念,但它们也有相似之处. ...
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
from https://blog.csdn.net/baidu_33621692/article/details/53213002 网络字节顺序和主机字节顺序的转换(htons ntohs hto ...
- long long 类型的网络字节顺序转换
long long 类型的网络字节顺序转换 sailor_forever sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/arc ...
- 深度掌握 Java Stream 流操作,让你的代码高出一个逼格
概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream` 的操作符大体上分为两种:`中间操作符`和`终止操 ...
- 【java基础】吐血总结Stream流操作
文章目录 Stream流操作讲解 在这里插入图片描述 1 Stream概述 2 Stream与传统遍历对比 3 Stream的创建 4 Stream的使用 4.1 遍历/匹配(foreach.find ...
最新文章
- 初识Hibernate之关联映射(一)
- 删除 jar 的 asset_【unity游戏开发】SDK学习(1)-C#与jar交互
- Redis的持久化机制-RDB方式和AOF方式
- Codeforces Round #392(div 2) 758D (贪心)
- 使用 RMAN 同步数据库
- 单机安装ZooKeeper
- Topcoder 658Div2
- 服务器gsql密码修改,gsql远程登录
- php 中文key_API常用签名验证方法(PHP实现)
- 【防守方基础】危险报文识别
- 2021-2025年中国准分子飞秒眼科激光器行业市场供需与战略研究报告
- 数字证书转换cer---pem
- 如何给100亿个数字排序
- excel表格怎么调整行高和列宽_excel表格怎么调整高度和宽度
- Android 源码 分析
- 百度坐标转换中文地址(百度地图JavaScript API逆地址解析 )
- 安卓机顶盒安装软件教程
- java中如何插入表格_Java如何向Word文档中添加表格?
- jsp:使用jsp完成数据的分页显示
- go get 指定代理
热门文章
- python 安装包时出现红字_Python安装(Windows 7 8 10)
- Matlab 常用运算符的用法和功能
- MATLAB学习笔记(一)
- 百练OJ:1007:DNA排序
- 各种数据库连接jdbc
- 5G的频谱效率,到底有多高
- DevExpress的TreeList怎样设置数据源,从实例入手
- DataTables提示:DataTables warning: table id=queueInfo_table - Requested unknown parameter 'type' for r
- 熟读《阿里巴巴java开发手册》(一、编程规约)
- 【PPT 下载】神策 2017 数据驱动大会干货限时分享!