注册 登录
主题 : 请问:@"\x1b"格式的十六进制如何转换为十进制数?
级别: 精灵王

UID: 15678
精华: 1
发帖: 1285
可可豆: 5414 CB
威望: 5409 点
在线时间: 2982(时)
注册时间: 2010-03-18
最后登录: 2017-11-18
0 楼:  发表于: 2017-06-19 09:55    发自: Web Page
来源于 心得经验 分类

请问:@"\x1b"格式的十六进制如何转换为十进制数?   

读取一个字节的data,debug看到的值为: \x1b,十进制的话是27,网上查到的方法:

NSString *str = @"0x1b";
unsigned long red = strtoul([str UTF8String],0,16);

得到的结果是27。但将str改为str = @"\x1b",得到的结果是0。请问:如何转换\x1b这种格式的十六进制?
级别: 新手上路
UID: 442236
精华: 0
发帖: 2
可可豆: 2 CB
威望: 2 点
在线时间: 93(时)
注册时间: 2015-02-25
最后登录: 2017-06-20
1 楼:  发表于: 2017-06-19 15:22    发自: Web Page
用NSSCanner, 查一下用法
级别: 新手上路
UID: 442236
精华: 0
发帖: 2
可可豆: 2 CB
威望: 2 点
在线时间: 93(时)
注册时间: 2015-02-25
最后登录: 2017-06-20
2 楼:  发表于: 2017-06-19 15:31    发自: Web Page
回 1楼(shaoxin0212) 的帖子
好像对特殊模式的还是不行, \x或者#开头的也不成功
级别: 精灵王
UID: 81021
精华: 1
发帖: 1701
可可豆: 6369 CB
威望: 6360 点
在线时间: 4574(时)
注册时间: 2011-07-13
最后登录: 2017-11-18
3 楼:  发表于: 2017-06-20 11:09    发自: Web Page
NSString *str = @"\x1b";
NSString *s = [str stringByReplacingOccurrencesOfString:@"\" withString: @"0";
unsigned long red = strtoul([s UTF8String],0,16);
级别: 精灵王

UID: 15678
精华: 1
发帖: 1285
可可豆: 5414 CB
威望: 5409 点
在线时间: 2982(时)
注册时间: 2010-03-18
最后登录: 2017-11-18
4 楼:  发表于: 2017-06-20 14:36    发自: Web Page
引用
引用第3楼newpro于2017-06-20 11:09发表的  :
NSString *str = @"\x1b";
NSString *s = [str stringByReplacingOccurrencesOfString:@"\" withString: @"0";
unsigned long red = strtoul([s UTF8String],0,16);


\x或\符号是无法被替换的。

级别: 精灵王

UID: 15678
精华: 1
发帖: 1285
可可豆: 5414 CB
威望: 5409 点
在线时间: 2982(时)
注册时间: 2010-03-18
最后登录: 2017-11-18
5 楼:  发表于: 2017-07-11 22:10    发自: Web Page
这个问题真的被卡住了。这个字节是表示后面要读取的总字节数,这个字节读不出来,后面的读不下去。
级别: *
UID: 216198
精华: *
发帖: *
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
6 楼:  发表于: 2017-07-17 17:07    发自: Web Page
回 5楼(die_hard) 的帖子
你要读取多长  比如取前4个字节,char *p = (char *) [data bytes];  int val = *((int *)p);  一个字节就是 char val =  *p;
[ 此帖被newioserr在2017-07-17 17:14重新编辑 ]

级别: *
UID: 216198
精华: *
发帖: *
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
7 楼:  发表于: 2017-07-17 17:13    发自: Web Page
回 5楼(die_hard) 的帖子
\x1b  只是gdb的表现形式而已
级别: 精灵王

UID: 15678
精华: 1
发帖: 1285
可可豆: 5414 CB
威望: 5409 点
在线时间: 2982(时)
注册时间: 2010-03-18
最后登录: 2017-11-18
8 楼:  发表于: 2017-07-17 17:52    发自: Web Page
Re:回 5楼(die_hard) 的帖子
引用
引用第7楼newioserr于2017-07-17 17:13发表的 回 5楼(die_hard) 的帖子 :
\x1b  只是gdb的表现形式而已


不太明白gdb。

我要读取的第80个字节(是表示后面数据长度的,这个位置是固定的),如下代码:

testData = [data subdataWithRange:NSMakeRange(80, 1)];

testData从debug看到的结果是"\x1b", 如果这个值转换成十进制是27的话,那么从第81个字节开始,读取后面的27个字节,testData得出的结果是对的。

testData = [data subdataWithRange:NSMakeRange(81, 27)];

所以,如果"\x1b"不能转换为27的话,后面的数据读取长度就不知道了,基本不会有正确的结果。


描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部