Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SWIFT中的指针、指针算法和原始数据?

SWIFT中的指针、指针算法和原始数据?

提问于 2018-01-29 16:49:39
回答 2关注 0查看 255

发现以下工作:

代码语言:txt
AI代码解释
复制
class RawData {
    var data: NSData!

    init(rawData: NSData) {
      data = rawData
    }

    func read<T>(byteLocation: Int) -> T {
      let bytes = data.subdataWithRange(NSMakeRange(byteLocation, sizeof(T))).bytes
      return UnsafePointer<T>(bytes).memory
    }

    func example_ReadAnIntAtByteLocation5() -> Int {
      return read(5) as Int
    }
}

在SWIFT有更好的方法吗?

代码语言:txt
AI代码解释
复制
@implementation RawDataOffsetPointer

inline void* offsetPointer(void* ptr, int bytes){
    return (char*)ptr + bytes;
}

@end

可以更改read方法

代码语言:txt
AI代码解释
复制
func read<T>(byteLocation: Int) -> T {
  let ptr = offsetPointer(data.bytes, CInt(byteLocation))
  return UnsafePointer<T>(ptr).memory
}

回答 2

为啥吃兔兔

发布于 2018-01-30 02:45:07

类似这样:

代码语言:txt
AI代码解释
复制
func generateRandomData(count:Int) -> NSData
{
    var array = Array<UInt8>(count: count, repeatedValue: 0)

    arc4random_buf(&array, UInt(count))
    return NSData(bytes: array, length: count)
}

let randomData = generateRandomData(256 * 1024)

let stream = NSInputStream(data: randomData)
stream.open() // IMPORTANT

var readBuffer = Array<UInt8>(count: 16 * 1024, repeatedValue: 0)

var totalBytesRead = 0

while (totalBytesRead < randomData.length)
{
    let numberOfBytesRead = stream.read(&readBuffer, maxLength: readBuffer.count)

    // Do something with the data

    totalBytesRead += numberOfBytesRead
}

可以创建一个extension,如下所示:

代码语言:txt
AI代码解释
复制
extension NSInputStream
{
    func readInt32() -> Int
    {
        var readBuffer = Array<UInt8>(count:sizeof(Int32), repeatedValue: 0)

        var numberOfBytesRead = self.read(&readBuffer, maxLength: readBuffer.count)

        return Int(readBuffer[0]) << 24 |
            Int(readBuffer[1]) << 16 |
            Int(readBuffer[2]) << 8 |
            Int(readBuffer[3])
    }
}

123456a134

发布于 2018-01-30 01:45:39

UnsafePointer<T>可以操纵:

代码语言:txt
AI代码解释
复制
   let oldPointer = UnsafePointer<()>
   let newPointer = oldPointer + 10

还可以像这样转换一个指针

代码语言:txt
AI代码解释
复制
   let castPointer = UnsafePointer<MyStruct>(oldPointer)
和开发者交流更多问题细节吧,去 写回答
相关文章
关于变量、指针、别名(引用)和指针的指针
C/C++中的指针和别名这个东西确实是够恶心的。今天蛋疼的就写一下这些东西的区别,变量永远是最简单的没有什么技术含量,那么另外一个比较简单的就是别名了,其实个人感觉这个东西完全可以看作是一个人的“小名”,只是对同一个变量多了一个称呼而已,指向的数据和地址是和原变量完全一致的,并且用&进行取地址操作的得到的地址和原变量的地址是完全一致的(因而在对指针进行赋值的时候如果直接对指针地址操作则需要对变量或者别名使用&进行取地址运算,如果要直接赋值则需要使用*p=进行赋值)。最复杂的就是指针了,同样个人认为指针到头来就是一个地址,这样可能会比较好理解一些。例如*pointer,那么带有*(解引用操作符)的时候则是表示的数值,如果没有*则表示的是地址。也就是说可以将pointer看成一个内存地址在这个地址中保存的是另外一个数据的地址,当存在*的时候表示取该地址存取的内容,否则则是取这个变量保存的地址。指针的指针则就更加复杂了,例如**p,那么可以看作指针保存的数据是另外的一个指针,解引用操作一次将会得到一个*p,这仍然是个指针,当进行二次解引用操作的时候(**p)才能读到p中保存的数据信息。这么说可能比较难理解,那么看个实例就明白了。效果如下图:
obaby
2023/02/28
1.4K0
关于变量、指针、别名(引用)和指针的指针
详解c++指针的指针和指针的引用
展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它。(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值。我们用下边的代码说明一下问题: int m_value = 1; void func(int *p) { p = &m_value; } i
lpxxn
2018/01/31
1.4K0
swift底层探索 06 - 指针简单使用swift底层探索 06 - 指针简单使用
如果在lldb中需要获取值类型的地址,直接使用po、p、v都是无法获取地址的,只能转为指针后才可以获取,如图一。
用户8893176
2021/08/09
7140
swift底层探索 06 - 指针简单使用swift底层探索 06 - 指针简单使用
【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )
有效回文串 : https://www.lintcode.com/problem/415/
韩曙亮
2023/03/29
2.5K0
【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )
指针常量和常量指针
顾名思义 这是一个指针类型的常量!常量的特点就是不可改变,所以被指针指向的常量地址也是不可以变的。
用户7272142
2023/10/11
1910
指针常量和常量指针
数组指针和指针数组
一、数组指针 初学C语言的朋友对数组指针这指针数组感到迷惑,分不清,包括我自己,其实是对概念的不清晰以及对数组和指针这两个概念理解的不够深入,下面谈谈我的理解。 数组指针,是一个指针而不是数组。 这个指针具有指向整个数组的能力,保存这个数组的其实地址。 定义数组指针变量
lexingsen
2022/02/24
7960
数组指针和指针数组
算法:双指针
双指针是一种思想或一种技巧并不是特别具体的算法。具体就是用两个变量动态存储两个结点,来方便我们进行一些操作。通常用在线性的数据结构中。
用户3578099
2022/04/18
3640
算法:双指针
函数指针的定义方式,和指针函数的区别,函数指针数组
可以类比数组指针:int(*p)[10] 方式1: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void fun1(int a, int b) { printf("%d+%d", a, b); } void test() { //函数指针定义的三种方式 //1.先定义出函数类型,再通过函数类型定义指针变量 typedef void(FUNC_TYPE)(int, int); FUNC_TYPE* func = fun1; func(10,2
大忽悠爱学习
2021/03/02
1.3K0
函数指针的定义方式,和指针函数的区别,函数指针数组
详解 常量指针和指针常量
说一下 常量指针和指针常量 的区别。 常量指针   指向常量的指针,也就是说指针指向的对象是常量,指向的常量不能修改。指针不是一个常量, 可以把指针指向别一个常量。 常量指针是我们最常用的,一般声明形式如下: const int *p; int const *p; 例: int a(1), b(3); const int *p; // 或者是 int const *p; p = &a; std::cout << "address : " << p
lpxxn
2018/01/31
1.3K0
函数指针和指针函数的学习小结
函数指针是指向函数的指针,指针函数是指一个函数的返回值是一个指针,但下面的几道题还是感觉很迷惑。各位能否讲的详细点呢?
阳光岛主
2019/02/19
1.1K0
7.6 指针数组和多重指针
一、指针数组 解释:一个数组,若其元素均为指针类型数据,称为指针数组 一般形式 类型名 *数组名[数组长度] 二、指向指针数据的指针 解释:指向指针数据的指针声明的是指针,只是这指针指向另一个指针
小林C语言
2019/08/09
4640
8.6 指针数组和多重指针
1、一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。
小林C语言
2019/07/12
3430
8.6 指针数组和多重指针
函数指针和指针函数用法和区别
函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。 今天这里只讲两个相对简单的,其实上面说那些太复杂的东西也真的很少用,即便是用了理解起来很麻烦,所以莫不如先深刻理解这两个比较容易的,并且项目中比较常用到。
全栈程序员站长
2022/06/25
2310
c专题之指针---野指针和空指针解析
在上一篇c专题指针文章中,我们介绍了什么是指针,文章里面从普通变量进而引出指针的概念,这样对指针的理解有一定的帮助(其实最好的理解,就是要明白硬件里面的内存原理,这是理解指针最好的地方,就好比说会汇编语言的人来去理解指针这里跟不会指针的人去理解,会有很大的差异的,在学汇编的时候,会接触到好多有关计算机里面内存的大话题,这个对于搞汇编的来说,掌握了汇编,对理解指针的原理非常容易;而大部分人(当然也包括我自己),刚开始学指针,是真的非常吃力,学了一阵子,感觉是学会了,但是一段时间没有去接触指针,再次来看指针的话,感觉一脸懵逼,好像没学过一样,不知道大家有没有我这样的经历,哈哈哈;这里指出不是鼓励大家去学花太多时间在汇编上(个人观点,现在出来上班,好少会搞汇编开发,你搞stm32和一些稍微功能强大的芯片,拿汇编去写,那简直不敢想象,而且也没听过谁这样干过),其实还是当你用到的时候再去学,很快上手的,就是有好多汇编指令要记,如果你一遍学一遍用,反而会学的更快,理解的更深,而且现在对理解一些高级芯片里面的启动代码会非常有帮助的)。好了,废话太多,来进入主题!
用户6280468
2022/03/18
1.9K0
c专题之指针---野指针和空指针解析
C++指针数组,二级指针和函数指针的练习
1.编一程序,将字符串“Hello,C++!”赋给一个字符数组, 然后从第一个字母开始间隔地输出该串(请用指针完成)。 代码如下 #include<iostream> #include<string> using namespace std; int main() { const char str[] = "Hello,C++!"; const char *p = str; while ((*p) != '\0') cout << *p++ << " ";
Enterprise_
2018/05/18
1.5K0
指针数组与指向指针的指针
指针数组与指向指针的指针 http://wlkc.gdqy.edu.cn/jpkc/portal/blob?key=173314 指针数组和数组指针的区别 http://allew.blog.163.
阳光岛主
2019/02/19
1.9K0
Java中的this指针
Java中,一般来说this指针指的是当前正在访问的这段代码的对象,但是如果在内部类中需要使用外部类中的对象,这时就需要使用外部类的类名进行限定。这种方式在Android开发中也比较常见。
全栈程序员站长
2022/08/29
3640
C++指针数组,二级指针和函数指针的练习
1.编一程序,将字符串“Hello,C++!”赋给一个字符数组, 然后从第一个字母开始间隔地输出该串(请用指针完成)。 代码如下 #include<iostream> #include<string> using namespace std; int main() { const char str[] = "Hello,C++!"; const char *p = str; while ((*p) != '\0') cout << *p++ << " "
Enterprise_
2019/03/01
1.1K0
C++指针数组,二级指针和函数指针的练习
7.1 什么是指针和指针变量
解释:由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此,将地址形象化地称为“指针”
小林C语言
2019/08/19
1.1K0
C语言(函数指针和指针函数)
经翻阅小学五年级语文课本得知,一个短语中的最后部分,是这个短语的中语,其余部分是定语(修饰语)。也就是说,以上短语相当于:
用户2617681
2019/08/08
1.8K0
C语言(函数指针和指针函数)

相似问题

C指针?数组?

2284

空指针异常?

0132

C语言 指针的问题?

016

QalService 空指针异常?

1381

c++ 指针转移问题?

0305
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
腾讯云TDP | KOL擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档