Swift中的UInt8真的相当于来自C的uint8_t

时间:2016-06-24 18:27:11

标签: c swift types swift2

我想知道UInt8是否真的等同于C中的uint8_t

我试图在C和Swift中编写相同的应用程序。

在C中我有

uint8_t hello[] = { 0x60, 0x60, 0xB0, 0x17 };

我写的时候

var hello = [UInt8](count:4, repeatedValue: 0);
hello[0]  = 0x60;
hello[1]  = 0x60;
hello[2]  = 0xB0;
hello[3]  = 0x17;

但是当我在基于套接字的应用程序中使用它们时,它们似乎并不是handelt。此外,XCode调试器还显示两个变量的不同数据。

C:

Debugger output for the variable in C

夫特:

Debugger output for the variable in C

所以我的问题是如何在Swift中获得与在C代码中相同的结果,或者这是非常相同的数据类型?

2 个答案:

答案 0 :(得分:0)

在C中,uint8_t不是真正的类型,它是对8位适合的重新定义 通常是char,(字符ASCII) 因此,C调试器只是根据ASCII表将8位数据转换为字符。看看桌子,你会发现你的角色来自哪里。 在swift中,它听起来它理解真正的8位值,并且你的调试器显示8位值的整数,这是由方式签名的,这是奇数

答案 1 :(得分:0)

在Swift中,hello实际上被桥接为UInt8元组((UInt8, UInt8, UInt8, UInt8)):

Bridged

其值可以通过0,1,...

加入

Array

如果可以的话,我会尝试使用元组格式而不是UInt8类型的Swift数组。