如何将int类型的数字js转换int类型成IP地址

42314人阅读
int转换为byte溢出怎么计算结果?如 int a=135 转换为 byte 要汉字描述
byte是1个字节 所以(字节型,占1 字节,表示8 位正整数,范围0 ~ 255)
int是4个字节 而把int转换成byte会截取最后一个字节
比如你说的135 转为2进制应该有4个字节 然后仅仅要最后一个字节
最后一个字节的第一位被作为符号位135转换2进制后为
然后按照 补码 计算规则看一下
把除了符号位之外 取反加1 变成 这结果是-121
用256 减去 你所转换的数的绝对值 ,然后,加个符号(和做转换数相反的),就是结果????????
156 (int类型) 转byte为什么是-100
我算出来应该是-28
156=B 转换为byte为11100B=-28
问题补充:
156=B 最高位为符号位 而11100B=28 故为-28
156 =0 B(第一个零位符号位,表示正,当然int型数值位前面还有N个0,略去)
由于1byte为8bit
所以转换为byte,符号位被丢弃(N个0也被丢弃),
结果为1 0011100B(此时,第一位符号位为1,为负),
由于负数按补码存储,所以转换为byte之后的真值为1 1100100(由补码求原码,按位取反末位加1),即-100
==============
lz前面都算对了,就差最后由负数的补码求真值,因为负数按补码存储,所以最后一步很关键
Java中int转byte问题
byte c1 = 46;
byte c2 = 95;
byte c3 = (byte)(c1 + c2);
System.out.println("c3=" + c3);
输出结果为什么是 负100 老师说是int4个字节byte是一个字节去掉三个字节,余下哪个字节是多少就是多少。可是哪三个字节是怎么去的呢
byte Max is 127.
the first "1" is mark,so "" is Complement Code.
=64 +32+ 16 +2=(-)114
at Subtraction 1
*/其实不能说是去掉3个字节,只能说在读取数据的时候只读取了最低的一个字节里的数据而已,那另外的3个字节还在 ,只是没有读取里面的内容而已
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:150707次
积分:1612
积分:1612
排名:第19441名
原创:12篇
转载:57篇
评论:35条
(3)(1)(1)(1)(4)(1)(1)(1)(2)(1)(7)(2)(1)(7)(14)(3)(1)(1)(2)(1)(5)(3)(4)(3)(1)(1)Java IPv4地址和int类型数字的互相转换 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了21693字,被8人关注,获得了16个喜欢
Java IPv4地址和int类型数字的互相转换
版权声明:本文源自简书,转载请务必注明出处:
对于ipv4的地址来说,如果用字符串的形式存储的话,其占用字节就比较大,比如对于IPv4地址0.0.0.0的字符串,就需要7个字节,IPv4为255.255.255.255 的字符串,需要15个字节,也就是说存储一个ip需要占用7~15个字节。
那么有没有更节省空间的存储方式呢?答案是有。方案1: 直接把字符串中的'.'去掉,不就变成一个数字了嘛,比如 "255.255.255.255" 变成 ,然而我们知道int所能表示的最大值 = Integer.MAX_VALUE = 2^31-1 = ,
& 2^31-1,所以需要用长整形long来表示,长整形占用8个字节,也就是说我们将7~15个字节转换为8字节,在绝大多数情况下是节省空间了的。
方案2: 因为考虑到IPv4的地址本质上就是32位的二进制串,而一个int类型的数字刚好为4个字节32个bit位,所以刚好可以用一个int类型的数字转表示IPv4地址。所以,我们可以用4个字节的int数字表示一个ip地址,这样可以大大节省空间。
这里只讨论方案2 :)
对于ipv4地址: 192.168.1.3:每段都用二进制表示: 192(10) = ) ; 168(10) = ) ; 1(10) = ) ;
3(10) = ) 。所以连在一起就是:,对应的int数字就是- 。
具体算法分析:192左移24位: 00 168左移16位: 00 001左移08位: 01 003左移00位: 00 按位或的结果: 001 即 -
将int类型的数字转换成ip地址,其实就是上述过程的逆过程,这里就不再赘述。
* IPv4地址和int数字的互相转换
* @author Tianma
public class IPv4IntTransformer {
* IPv4地址转换为int类型数字
public static int ip2Integer(String ipv4Addr) {
// 判断是否是ip格式的
if (!isIPv4Address(ipv4Addr))
throw new RuntimeException("Invalid ip address");
// 匹配数字
Pattern pattern = pile("\\d+");
Matcher matcher = pattern.matcher(ipv4Addr);
int result = 0;
int counter = 0;
while (matcher.find()) {
int value = Integer.parseInt(matcher.group());
result = (value && 8 * (3 - counter++)) |
* 判断是否为ipv4地址
private static boolean isIPv4Address(String ipv4Addr) {
String lower = "(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])"; // 0-255的数字
String regex = lower + "(\\." + lower + "){3}";
Pattern pattern = pile(regex);
Matcher matcher = pattern.matcher(ipv4Addr);
return matcher.matches();
* 将int数字转换成ipv4地址
public static String integer2Ip(int ip) {
StringBuilder sb = new StringBuilder();
int num = 0;
boolean needPoint = // 是否需要加入'.'
for (int i = 0; i & 4; i++) {
if (needPoint) {
sb.append('.');
needPoint =
int offset = 8 * (3 - i);
num = (ip && offset) & 0
sb.append(num);
return sb.toString();
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:ip地址与int类型的转换
最近看道一个面试题目,大体意思就是将ip地址,例如&192.168.1.116&转换成int类型,同时还能在转换回去
ip地址转int类型,例如ip为&192.168.1.116&,相当于&.&将ip地址分为了4部分,各部分对应的权值为256^3, 256^2, 256, 1,相成即可
int类型转ip地址,思路类似,除以权值即可,但是有部分字符串的操作
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#include &math.h&
#define LEN 16
* 字符串转整形
uint ipTint(char *ipstr)
if (ipstr == NULL)
uint i = 3, total = 0,
token = strtok(ipstr, &.&);
while (token != NULL) {
cur = atoi(token);
if (cur &= 0 && cur &= 255) {
total += cur * pow(256, i);
token = strtok(NULL, &.&);
* 逆置字符串
void swapStr(char *str, int begin, int end)
for (i = begin, j = i &= i ++, j --) {
if (str[i] != str[j]) {
str[i] = str[i] ^ str[j];
str[j] = str[i] ^ str[j];
str[i] = str[i] ^ str[j];
* 整形转ip字符串
char* ipTstr(uint ipint)
char *new = (char *)malloc(LEN);
memset(new, &#39;\0&#39;, LEN);
new[0] = &#39;.&#39;;
char token[4];
int bt, ed, len,
while (ipint) {
cur = ipint % 256;
sprintf(token, &%d&, cur);
strcat(new, token);
ipint /= 256;
if (ipint)
strcat(new, &.&);
len = strlen(new);
swapStr(new, 0, len - 1);
for (bt = ed = 0; ed &) {
while (ed & len && new[ed] != &#39;.&#39;) {
swapStr(new, bt, ed - 1);
new[len - 1] = &#39;\0&#39;;
int main(void)
char ipstr[LEN], *
while (scanf(&%s&, ipstr) != EOF) {
ipint = ipTint(ipstr);
printf(&%u\n&, ipint);
new = ipTstr(ipint);
printf(&%s\n&, new);
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'【1】Java中怎么把int型的数字转换成char型的数字
【1】Java中怎么把int型的数字转换成char型的数字
Java面试题
今天在做中兴笔试题时候涉及到了int&&char类型转换的问题;有两种方法:
一:方法一:
int i = 1;
char c = (char) (i+48);&span style=&color: rgb(0, 130, 0); font-family: Monaco, &DejaVu Sans Mono&, &Bitstream Vera Sans Mono&, Consolas, &Courier New&, font-size: 1 line-height: 18 background-color: rgb(250, 250, 250);&&&#160;&/span&
二:方法二
&span style=&white-space:pre&&
&/span&int num2=9;
String s = String.valueOf(num2);
char c = s.charAt(0);
同理:char&&&int
当char类型为数字时:
&span style=&white-space:pre&& &/span&char a = &#39;1&#39;;
int i = Integer.parseInt(String.valueOf(a));
当char类型是'a' 'A'时:
//将字符串转化为数字
public static int hexToNum(char ch){
int chNum=0;
if(ch&=&#39;0&#39; && ch&=&#39;9&#39;){
chNum=ch-&#39;0&#39;;
}else if(ch&=&#39;A&#39; && ch&=&#39;Z&#39;){
chNum=ch-&#39;A&#39;+10;
}else if(ch&=&#39;a&#39; && ch&=&#39;z&#39;){
chNum=ch-&#39;a&#39;+10;
return chN
反映出我的基础还很不扎实,要好好看基础。
我的热门文章
即使是一小步也想与你分享}

我要回帖

更多关于 long类型转换成int 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信