在本文中,您将会了解到关于addr2line的用法的新资讯,同时我们还将为您解释addr2line如何使用的相关在本文中,我们将带你探索addr2line的用法的奥秘,分析addr2line如何使用的
在本文中,您将会了解到关于addr2line的用法的新资讯,同时我们还将为您解释addr2line如何使用的相关在本文中,我们将带你探索addr2line的用法的奥秘,分析addr2line如何使用的特点,并给出一些关于#define的用法、2019-01-25-read()、readline()和readlines()的用法区别、5、【Linux网络编程】socket中htonl() htons() ntohl() ntohs()及inet_ntoa() inet_addr()的用法、addEventListener 的用法示例介绍_javascript技巧的实用技巧。
本文目录一览:- addr2line的用法(addr2line如何使用)
- #define的用法
- 2019-01-25-read()、readline()和readlines()的用法区别
- 5、【Linux网络编程】socket中htonl() htons() ntohl() ntohs()及inet_ntoa() inet_addr()的用法
- addEventListener 的用法示例介绍_javascript技巧
addr2line的用法(addr2line如何使用)
到ndk找到addr2line,例如:
/Users/yangjun/Library/Android/sdk/ndk/android-ndk-r9d/toolchains/x86-4.8/prebuilt/darwin-x86_64/bin/i686-linux-android-addr2line
然后执行:
./i686-linux-android-addr2line -f -C -e 带符号so的文件路径 地址
示例:
./i686-linux-android-addr2line -f -C -e /Users/yangjun/git/dingtalk/TBLiveStream-Android/artc-core/src/main/obj/local/armeabi-v7a/libTaoLive.so 0x33308
_jnienv::NewStringUTF(char const*)
/Users/liuyouxue/Library/Android/sdk/ndk/android-ndk-r9d/platforms/android-16/arch-arm/usr/include/jni.h:873
./i686-linux-android-addr2line -f -C -e /Users/yangjun/git/dingtalk/TBLiveStream-Android/artc-core/src/main/obj/local/armeabi-v7a/libTaoLive.so 0x476e4
TaoLivePublishEngine_Impl::onCsd(int, Buffer_Struct const&)
/Users/liuyouxue/work/android/dingding/c-bug/TBLiveStream-Android/artc-core/src/main/jni/LiveMediaFramework/fw/engine/TaoLivePublishEngine_Impl.cpp:856
./i686-linux-android-addr2line -f -C -e /Users/yangjun/git/dingtalk/TBLiveStream-Android/artc-core/src/main/obj/local/armeabi-v7a/libTaoLive.so 0x49cd8
FAACEncoder::configure(encode_param const&)
/Users/liuyouxue/work/android/dingding/c-bug/TBLiveStream-Android/artc-core/src/main/jni/LiveMediaFramework/fw/codec/FAACEncoder.cpp:82
#define的用法
(x + y )
#endif
2019-01-25-read()、readline()和readlines()的用法区别
标签:python
需要提取的数据为:
i:I love seajay
from:AUTO
to:AUTO
smartresult:dict
client:fanyideskweb
salt:15483356026163
sign:0e6fc7b099ab52173b750e4f1fe2e967
ts:1548335602616
bv:563490a3a59c96d89a5868bde7ab81c1
doctype:json
version:2.1
keyfrom:fanyi.web
action:FY_BY_CLICKBUTTION
typoResult:false
将以上数据另存为“原始数据.txt”
1. read()的使用
>>> data = {}
filename = "原始数据.txt"
>>> with open(filename) as f:
print(f.read())
i:I love seajay
from:AUTO
to:AUTO
smartresult:dict
client:fanyideskweb
salt:15483356026163
sign:0e6fc7b099ab52173b750e4f1fe2e967
ts:1548335602616
bv:563490a3a59c96d89a5868bde7ab81c1
doctype:json
version:2.1
keyfrom:fanyi.web
action:FY_BY_CLICKBUTTION
typoResult:false
或者
>>> data = {}
filename = "原始数据.txt"
>>> with open(filename) as f:
print(f.read(80))
i:I love seajay
from:AUTO
to:AUTO
smartresult:dict
client:fanyideskweb
salt:1548
2. readline()的使用
>>> with open(filename) as f:
line = f.readline().rstrip()
while line:
print(line)
line = f.readline().rstrip()
i:I love seajay
from:AUTO
to:AUTO
smartresult:dict
client:fanyideskweb
salt:15483356026163
sign:0e6fc7b099ab52173b750e4f1fe2e967
ts:1548335602616
bv:563490a3a59c96d89a5868bde7ab81c1
doctype:json
version:2.1
keyfrom:fanyi.web
action:FY_BY_CLICKBUTTION
typoResult:false
注意:需要在末尾加上.strip(),否则输出会包含\n回车符
3. readlines()的使用
>>> data = {}
filename = "原始数据.txt"
>>> with open(filename) as f:
print(f.readlines())
[''i:I love seajay\n'', ''from:AUTO\n'', ''to:AUTO\n'', ''smartresult:dict\n'', ''client:fanyideskweb\n'', ''salt:15483356026163\n'', ''sign:0e6fc7b099ab52173b750e4f1fe2e967\n'', ''ts:1548335602616\n'', ''bv:563490a3a59c96d89a5868bde7ab81c1\n'', ''doctype:json\n'', ''version:2.1\n'', ''keyfrom:fanyi.web\n'', ''action:FY_BY_CLICKBUTTION\n'', ''typoResult:false'']
5、【Linux网络编程】socket中htonl() htons() ntohl() ntohs()及inet_ntoa() inet_addr()的用法
htonl() htons() ntohl() ntohs()及inet_ntoa() inet_addr()的用法
一、网络字节序和主机字节序
注:其中的h表示“host”,n表示“net”,l表示“long”,s表示“short”,a表示“ascii”,addr表示“in_addr结构体”
这些函数都与网络字节序和主机字节序列的转换,首先介绍一下网络字节序和主机字节序列及两者之间的转换关系。
网络字节顺序NBO(Network Byte Order):
按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。
主机字节顺序(HBO,Host Byte Order):
不同的机器HBO不相同,与CPU设计有关,数据的顺序是由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
以IP地址127.0.0.1为例,看看两者之间是如何转换的:
1 第一步 127 . 0 . 0 . 1 把IP地址每一部分转换为8位的二进制数。
2 第二步 01111111.00000000.00000000.00000001 = 2130706433 (主机字节序)
3 然后把上面的四部分二进制数从右往左按部分重新排列,那就变为:
4 第三步 00000001.00000000.00000000.01111111 = 16777343 (网络字节序)
【示例】
1 SOCKADDR_IN addrSrv;
2 addrSrv.sin_addr.S_un.S_addr=htonl(2130706433);
3 addrSrv.sin_family=AF_INET;
4 addrSrv.sin_port=htons(6000);
先是定义了一个IP地址结构体addrSrv,然后初始化它的IP时addrSrv.sin_addr.S_un.S_addr必须是赋值IP地址的网络字节序,htonl函数的作用是把一个主机字节序转换为网络字节序,也就是上面转换过程中第二步转换为第三步的作用,127.0.0.1的主机字节序是2130706433,把主机字节序2130706433转换为网络字节序就是htonl(2130706433)=16777343,所以如果你知道网络字节序是16777343的话,addrSrv.sin_addr.S_un.S_addr=htonl(2130706433);与addrSrv.sin_addr.S_un.S_addr=16777343;是完全一样的。
1 addrSrv.sin_addr.S_un.S_addr=htonl(2130706433);//这句还可以写为下面的样子
2 addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
3 //结果是完全一样的。
4 //可见inet_addr函数的转换作用就是上面的第一步到第三步的转换。
下面再看端口的主机字节序与网络字节序的转换。以6000端口为例。
1 第一步 00010111 01110000 = 6000 (主机字节序)
2 //端口号其实就已经是主机字节序了,首先要把端口号写为16位的二进制数,分前8位和后8位。
3 第二步 01110000 00010111 = 28695 (网络字节序)
4 //然后把主机字节序的前八位与后八位调换位置组成新的16位二进制数,这新的16位二进制数就是网络字节序的二进制表示了。
因此,如果你知道6000端口的网络字节序是28695的话。 addrSrv.sin_port=htons(6000);可以直接写为 addrSrv.sin_port=28695;结果是一样的,htons的作用就是把端口号主机字节序转换为网络字节序。
二、htonl() htons() ntohl() ntohs()及inet_ntoa() inet_addr()的用法
htonl()函数:将主机字节序转换为网络字节序
函数原型:
1 u_long PASCAL FAR htonl (u_long hostlong);
htons()函数:将主机字节序转换为网络字节序
函数原型:
1 u_short PASCAL FAR htons (u_short hostshort);
ntohl()函数:网络顺序转换成主机顺序
函数原型:
1 u_long PASCAL FAR ntohl (u_long netlong);
ntohs()函数:网络顺序转换成主机顺序
函数原型:
1 u_short PASCAL FAR ntohs (u_short netshort);
inet_ntoa()函数:接受一个in_addr结构体类型的参数并返回一个以点分十进制格式表示的IP地址字符串。
函数原型:
1 char FAR * PASCAL FAR inet_ntoa (struct in_addr in);
inet_addr()函数:需要一个字符串作为其参数,该字符串指定了以点分十进制格式表示的IP地址(例如:192.168.0.16)。
而且inet_addr函数会返回一个适合分配给S_addr的u_long类型的数值。
函数原型:
1 unsigned long PASCAL FAR inet_addr (const char FAR * cp);
addEventListener 的用法示例介绍_javascript技巧
(要注意的是div必须放到js前面才行)
一般情况下,如果给一个dom对象绑定同一个事件,只有最后一个会生效,比如:
document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;
那么将只有method3生效。
如果是Mozilla系列,用addEventListener可以让多个事件按顺序都实现,比如:
var btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);