大家都知道 BMP 文件是小端字节序的。维基百科页面说前 2 个字节必须是0x424D为了确保该文件是 BMP,但是当我从 BMP 文件获取前 2 个字节时,它给了我相反的两个字节0x4D42。
我的代码:
FILE *file;
unsigned short bmpidentifier;
if((file = fopen("c://loser.bmp", "rb")) == NULL){
perror("The problem is");
return -1;
}
fread(&bmpidentifier, sizeof(unsigned short), 1, file);
if(bmpidentifier == 0x424D){
printf("The file actually is a bmp file.\n");
} else{
printf("%X\n", bmpidentifier);
printf("The file is not a bmp file.\n");
}
Run Code Online (Sandbox Code Playgroud)
现在,BMP 文件字节如何按小端排序,并给我反转的前 2 个字节?
我的python后端isoformat()在UTC日期时间使用该方法,这导致字符串看起来像2014-01-14T18:07:09.037000.在其他示例之后,我正在尝试从这些字符串创建NSDate(在JSON数据包中传递):
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:S"];
NSLog(@"cycle_base %@", myFields[@"cycle_base"]);
self.cycleBase = [dateFormatter dateFromString: myFields[@"cycle_base"]];
NSLog(@"cycleBase %@", self.cycleBase);
Run Code Online (Sandbox Code Playgroud)
我试过S格式字符串的部分(应该是小数秒?),但无济于事.我总是得到一个零.我究竟做错了什么?
我在一个单元原型中有一组协作控件.我发现我想在另一个视图控制器中重用表外的同一个协作组.
所以我UIViewController在我的故事板中创建了一个新的,将所有控件移动到那里并将交互行为从我的UITableViewCell子类移动到新的子类.现在我只需要在storyboard中的原型单元格中放置一个容器视图,然后连接嵌入segue.很容易.
我不知道怎么做,是新的子视图控制器(我的新子类)将被实例化,以及如何从单元子类代码引用它?我需要将单元属性中的一些信息传递给嵌入式视图控制器.我可以在单元格中为容器视图创建一个插座,但这是视图,而不是嵌入式视图控制器.
如果有的话,拥有多个 BLE 的价值是services什么?与只是将所有characteristics服务都放在一项服务中?
我正在从我们自己制造的(外围)设备构建一个 BLE 接口。我正在使用该STMicro BlueNRG-ms芯片。我的第一个原型使用了 9 个characteristics,在 4 个中组织得很好services。现在编写它的应用程序方面,我发现单独的服务只会创建更多UUID我必须映射的 s,并且似乎并没有真正增加任何价值。这 9 个特征都是独一无二的,所以我没有从单独的服务中获得任何真正需要的命名空间。
以下代码示例很好地说明了我所追求的内容.我有一个预期返回给定类型的函数.它基于不完整的开关来做到这一点.但是如果default案件到达,我希望只是产生一个错误.而不是返回optional某人选择!然后在那时死亡的人.
func someFunc(value:UInt8) -> SomeType {
switch value {
case 0x00:
return SomeType.foo()
case 0x13:
return SomeType.bar()
default:
break // BUT I WANT AN ERROR HERE
}
}
Run Code Online (Sandbox Code Playgroud) 简单地探索Swift,在Observable模式的通过仪式的背景下.我想要探索的是为了语法糖而实现前缀运算符.
class Observable<T> {
var value:T
init(_ v:T) {
value = v
}
}
postfix operator &* { }
postfix func &* (arg:Observable<T>) -> T {
return arg.value
}
Run Code Online (Sandbox Code Playgroud)
但是,编译器告诉我的-> T是use of an undeclared type.通用版真的不能用作返回类型吗?这里还有别的东西吗?
在Swift中,我可以创建一个类似的协议
protocol FoobarConvertible {
var foobar:String { get }
}
Run Code Online (Sandbox Code Playgroud)
然后使用一致的实现扩展系统中的任何类
extension String : FoobarConvertible {
var foobar:String {
get {
return "foobar"
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin中,我认为接口类似于协议(?),我可以像这样声明一个
protocol FoobarConvertible {
val foobar:String
}
Run Code Online (Sandbox Code Playgroud)
但是我从文档(这似乎是简洁的练习)中看不出来的是我如何扩展Kotlin的String类以使其符合FoobarConvertible.显然,我可以在Kotlin字符串中添加一个扩展方法
val String.foobar:String
get() = "foobar"
Run Code Online (Sandbox Code Playgroud)
但是这不允许将字符串用作FoobarConvertible是预期类型的参数.
我一直认为对于 BLE 外设上的每个特征/服务/描述符,都有一个唯一的 UUID。我认为 UUID 不仅描述了它提供的内容,而且还为其提供了一个独特的句柄。基本上,我认为传输层使用它来识别外围和中央之间的特定实例。
但是在使用 Android 时,我发现要具有可通知的特征,您不仅必须使用setCharacteristicNotificationAPI,还必须在规范化的 UUID ( 00002902-0000-1000-8000-00805f9b34fb)处向特征询问特定描述符,然后设置该特征的值描述符以允许适当的通知/指示。
我不明白的是,这意味着对于我的设备具有的每个可通知特征,它都有一个与该特定 UUID 关联的描述符。如果我有 5 个应通知的特征,我将有 5 个不同的描述符,但都具有相同的 UUID。那么当 Android 设备写入这些描述符之一时,它使用什么地址来指定外观相似的描述符?这一切都是在引擎盖下神奇地管理的吗?
我正在尝试@ExperimentalUnsignedTypes在我的 AndroidStudio 项目中使用 。似乎我必须把它放在几乎任何地方,所以我宁愿在项目范围内设置它。
文档说
除非使用 UseExperimental 注释(例如 @UseExperimental(ExperimentalUnsignedTypes::class))或 -Xuse-experimental=kotlin.ExperimentalUnsignedTypes 编译器选项明确选择加入,否则此类 API 的使用将报告为警告。
尽职尽责地,我已经调整了我的Preferences>>Other Settings>>Kotlin Compiler:
但是在清理/制作后我仍然收到(很多)警告。有人建议我也添加-XXLanguage:+InlineClasses到同一行。但结果是一样的。然后我注意到在同一首选项窗格的顶部它说:
这是我的问题吗?如果是这样,我可以在哪里调整我的应用程序设置,以便这些编译器设置有效?
给定 Kotlin 中的字符串,如何以字符串文字格式打印它?
或者以更长的形式,给定一些名为foo的方法来执行此操作,它将执行以下操作:
println("Howdy".foo()) --> "Howdy" (quotes included in the output)
println("1 line\n\tand a tab".foo()) --> "1 line\n\tand a tab"
println("\"embeded quotes\"".foo()) --> "\"embeded quotes\""
Run Code Online (Sandbox Code Playgroud)
基本上我正在尝试创建与字符串的代码形式匹配的调试输出。toString仅返回字符串,而不是在代码中重新创建它的修饰/转义。