首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >目标-c:为什么在我继承的代码中使用strtol方法?

目标-c:为什么在我继承的代码中使用strtol方法?
EN

Stack Overflow用户
提问于 2018-11-06 16:29:59
回答 2查看 309关注 0票数 0

我最近继承了一些Objective代码,对它的实际操作感到困惑吗?

1)我不明白为什么char byte_chars[3]先填充'0‘,最后再填充’0‘?

2)我不明白为什么他们用unsigned char作为wholeByte,但他们投入了很长的时间吗?

3)我的一部分对strtol方法在这里做什么有点困惑,它需要3个byte_chars字节(它们是十六进制),然后将它们转换为一个长字节?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (NSString *)starFromFlags:(NSString *)flags {
    unsigned char wholeByte; 
    char byte_chars[3];
    NSString *star = @"NO";

    byte_chars[0] = '0'; 
    byte_chars[1] = [flags characterAtIndex:1]; 
    byte_chars[2] = 0; 
    wholeByte = strtol(byte_chars, NULL, 16); 

    if (wholeByte & 0x01) star = @"YES";

    return star;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-06 16:56:00

至1:

结尾处的0是结尾处的'\0‘(都是零的值),意思是“字符串在这里结束”。你必须把它放在末端才能结束字符串。

开始处的'0‘(字母0)表示strtol()的八进制值(不是十六进制,即"0x")。但是,正如CRD正确地提到的(见注释),它被传递给strtol()的第三位arg所取代。因此,到目前为止,您有一个带有0的双字母字符串,第一个字符和标志的十六进制表示形式作为第二个字符。

原因可能是,标志包含一个数字,从'0‘到'f'₁₆/'F'₁₆(0到15₁₀)。

至2:

因为转换产生的值在0的范围内(…)15长值将有其中一个值。您可以将它存储在一个字节中,而不需要一个完整的字节。但是,strtol()总是返回一个长的。

至3:

是的,它是从包含数字的字符串转换为数字的转换。即字符串"06“将转换为数字6。

票数 1
EN

Stack Overflow用户

发布于 2018-11-08 02:57:10

Amin Negm-Awad解释了代码所做的工作(对八进制有点困惑),但对于回答您的问题:

为什么在我继承的代码中使用strtol方法?

我们只能猜测。

字符串中的第二个字符似乎是用于(最多)4个标志位的十六进制数字,该方法正在测试是否设置了其中最不重要的一个。一个更简单的方法可能是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (NSString *)starFromFlags:(NSString *)flags
{
   unichar flag = [flags characterAtIndex:1];

   if (flag > 127 || !isxdigit(flag))  // check flag is in ASCII range and hex digit
      return @"INVALID";
   else
      return digittoint(flag) & 0x1 ? @"YES" : @"NO"; // check if flag is odd hex
}

isxdigit()digittoint()是C库函数(就像strtol()一样),在终端中使用man isxdigit作为文档(除非您使用的Xcode的旧版本包含这些文档,否则苹果将在最新版本中删除文档)。第一个检查字符是否为十六进制数字,第二个检查返回等效的整数。> 127检查是对字符串中非“ASCII”字符的最小保护。

注意:NSString (表示为)为UTF-16代码单元的序列,因此characterAtIndex:返回unichar (16位类型),因此是flag__的类型。但是,此代码不能正确处理任何 unicode字符串。如果您的字符串是"ASCII“,它将工作。

实际上,上面的函数比原始函数进行更多的错误检查,如果您乐于减少错误检查,只需使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (NSString *)starFromFlags:(NSString *)flags
{
   return digittoint([flags characterAtIndex:1]) & 0x1 ? @"YES" : @"NO";
}

这将返回@"YES"当且仅当标志是十六进制数字并设置其LSB时,如果不是十六进制数字或LSB未设置,则返回@"NO"。这是因为如果digittoint()的参数不是十六进制数字,它会返回0

那么,为什么最初的程序员使用strtol()呢?也许他们不知道digittoint()的事。

HTH

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53182074

复制
相关文章
关于go的只读管道只写管道以及单向管道的理解
上面的例子,writeChan只能对ch变量进行写操作,readChan只能对ch变量进行读操作,这样造成很多同学对管道理解就有了只读和只写管道了,其实管道都是双向的,默认双向可读写,只是管道在函数参数传递时可以使用操作符限制管道的读写,就如上面的例子。
公众号-利志分享
2022/04/25
1K0
Transformers 如何模仿大脑的某些部分
来源:ScienceAI 本文约2500字,建议阅读7分钟 本文将演示如何通过阈值调优来提高模型的性能。 了解大脑如何组织和访问空间信息「我们在哪里」,「拐角处有什么」,「如何到达那里」,这仍然是一项艰巨的挑战。该过程涉及从数百亿个神经元中调用整个记忆网络和存储的空间数据,每个神经元都连接到数千个其他神经元。 神经科学家已经确定了关键元素,例如网格细胞、映射位置的神经元。但更深入将被证明是棘手的:并不是说研究人员可以移除或研究人类灰质的切片来观察基于位置的图像、声音和气味记忆是如何流动并相互连接的。 人工
数据派THU
2022/10/09
6340
Transformers 如何模仿大脑的某些部分
[译]Rxjs&Angular-退订可观察对象的n种方式
在angular项目中我们不可避免的要使用RxJS可观察对象(Observables)来进行订阅(Subscribe)和退订(Unsubscribe)操作;
laggage
2021/02/05
1.2K0
[译]Rxjs&Angular-退订可观察对象的n种方式
【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例
尽管看起来Http请求的返回结果是一个可观测对象,但是它却没有map方法,当需要对http请求返回的可观测对象进行操作时,可以使用pipe操作符来实现:
大史不说话
2019/02/21
6.7K0
【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例
TOP中只查看某个或某些进程的信息
例:php-fpm的信息 (1)得到php-fpm进程的pid [root@test ~]# pidof php-fpm 29618 29617 29616 29505 29504 29503 (2)top指定查看PID [root@test ~]# top -p 29618 top - 19:07:34 up 75 days, 10:18, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 1 total, 0 running, 1 sleepi
joshua317
2018/04/16
1.1K0
Angular快速学习笔记(4) -- Observable与RxJS
介绍RxJS前,先介绍Observable 可观察对象(Observable) 可观察对象支持在应用中的发布者和订阅者之间传递消息。 可观察对象可以发送多个任意类型的值 —— 字面量、消息、事件。 基本用法和词汇 作为发布者,你创建一个 Observable 的实例,其中定义了一个订阅者(subscriber)函数。 当有消费者调用 subscribe() 方法时,这个函数就会执行。 订阅者函数用于定义“如何获取或生成那些要发布的值或消息”。 要执行所创建的可观察对象,并开始从中接收通知,你就要调用它的 s
JadePeng
2018/05/28
5.3K0
[译] 调试 RxJS 第2部分: 日志篇
原文链接: https://blog.angularindepth.com/debugging-rxjs-part-2-logging-56904459f144 本文为 RxJS 中文社区 翻译文章
用户1687375
2018/06/08
1.2K0
[译] 调试 RxJS 第1部分: 工具篇
原文链接: https://blog.angularindepth.com/debugging-rxjs-4f0340286dd3 本文为 RxJS 中文社区 翻译文章,如需转载,请注明出处,谢谢合作
用户1687375
2018/06/08
1.3K0
浅谈 Angular 项目实战
我不是 Angular 的布道者,但如今自称 Angular 派,使用 Angular 做项目让我有一种兴奋感。目前的三大主流前端框架都研究过,博客中也有三者的相关教程,最早接触的是 React,但是并没有实际的项目经验,只做过一些 Demo 。使用 Vue 做过一个比较复杂的移动端大数据项目,技术栈采用 Framework7 + Vue + Vuex,整体效果还是满意的。
叙帝利
2018/07/31
4.6K0
Angular 16 正式版发布
在之前的Angularv15中,Angular团队通过将独立API从开发者预览版升级至稳定版,在Angular的简易性和开发者体验方面达到了一个重要的里程碑。如今,Angular将继续这一改进的势头,发布了自Angular最初推出以来最大的一次版本更新;在Reactivity、服务器端渲染和工具方面取得了巨大的飞跃。
xiangzhihong
2023/05/07
2.6K0
Angular 16 正式版发布
如何使用 RxJS 更优雅地进行定时请求
实际的业务场景是这样的:前端需要轮循请求后端接口获取文件处理进度,并在前端用进度条展示。如下方所示:
叙帝利
2019/06/03
2.2K0
Angular v16 来了!
六个月前,我们将独立 API从开发人员预览中升级,从而在 Angular 的简单性和开发人员体验方面达到了一个重要的里程碑。今天,我们很高兴地宣布,我们将继续 Angular Momentum,推出自 Angular 首次推出以来最大的版本;在反应性、服务器端渲染和工具方面取得巨大飞跃。所有这一切都伴随着跨功能请求的数十项生活质量改进,在 GitHub 上获得了 2,500 多个赞!
gemron的空间
2023/05/09
2.6K0
用于物联网的大数据参考架构
工业物联网(IIOT,Industrial Internet of Things)正成为社会中的技术趋势与核心业务。IIOT 赋能诸如市政(Municipalities)、工业制造、公用事业、电信,以及保险等各类实体,以解决关键客户与运营的挑战。当前,技术创新在大数据、预测分析和云计算等领域的发展,使得人们可以大规模地集成与分析大量的设备数据,同时对这些数据执行一系列分析以及业务处理流程。
StoneDemo
2018/06/01
1.7K0
Rafy 升级:支持只查询实体的部分属性
Rafy 3.80.4005 添加了新功能:支持只查询部分属性的方式来查询实体。 本文记录对应的设计: 需求 测试用例 设计-API 设计-实现 代码实现 接下来就是实现内部的代码。完成之后,所有单元测试通过。
用户1172223
2021/10/26
6260
ReadProcessMemory会被检测到吗?_仅完成部分readprocess如何解决
hProcess:目标进程的句柄。这个句柄必须有 PROCESS_VM_READ 标记。
全栈程序员站长
2022/11/09
7970
Linux 的命令 ls 只列出部分目录或是文件
ls 默认从小到大顺序列出 当前目录下所有的文件和目录。 现在的问题是,我只想按照这样的顺序列出指定数目的目录或是文件,那样怎么实现呢? 比如 有image目录下有10个子目录 image1 image2….image10, 我直需要列出2个目录 image1 iamge2
全栈程序员站长
2022/07/11
3.8K0
5 分钟内造个物联网 Kafka 管道
原文地址:https://dzone.com/articles/creating-an-iot-kafka-pipeline-in-under-five-minutes
未来守护者
2018/04/25
2.1K0
点击加载更多

相似问题

如何才能让RxJS可观察到的管道访问原始可观测到的排放和管道的先前排放?

10

RxJS使用混合排放物

16

rxjs可观测到角

16

rxjs -可观测到的搜索

10

可观测到的RxJS检测

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文