我知道如何在java中做到这一点(见这里),但是我找不到java的ByteBuffer的快速等价物,因此找不到它的.putDouble(double value)方法.
基本上,我正在寻找这样的功能:func doubleToByteArray(value: Double) -> [UInt8]? {
. . .
}
doubleToByteArray(1729.1729) // should return [64, 155, 4, 177, 12, 178, 149, 234]
Run Code Online (Sandbox Code Playgroud) 我过去已成功加载了所有图像,而且我正在使用OpenGL ES 2.0,因此图像不需要是2的幂(我有几个成功加载但不是).
有问题的代码是这样的:
Line 96: splashSheet = new Texture(Gdx.files.internal("test.png"));
Run Code Online (Sandbox Code Playgroud)
这是我的错误消息:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
at com.badlogic.gdx.graphics.Texture.load(Texture.java:175)
at com.badlogic.gdx.graphics.Texture.create(Texture.java:159)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:133)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:122)
at com.panini.game.GameScreen.show(GameScreen.java:96)
at com.badlogic.gdx.Game.setScreen(Game.java:59)
at com.panini.game.Splash.render(Splash.java:29)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:190)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)
Caused by: java.io.IOException: couldn't load pixmap
at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:57)
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:138)
... 11 more
Run Code Online (Sandbox Code Playgroud)
这就是使这成为一个有趣问题的原因.我可以加载这个文件,但我无法加载这个.前者基本上只是我想要使用的截图.我提供的第二张图片(不起作用)是原版.它被称为splashSprites.png,但我已经尝试将其重命名为test.png并正确引用它但它仍然不起作用,所以我知道这绝对不是命名问题或任何事情.如果我将这两个文件分别放在名为test1.png和test2.png的assets或bin目录中,那么如果我要求加载test1.png则代码可以正常工作,但如果我要求加载test2.png则不行,所以这不是我我把文件放在错误的地方.这两个似乎是最有可能的候选人,但我已经排除了他们.
我尝试了其他的东西,比如重新导出第一张图片等但它从来没有用过(做了什么工作就是截图,这就是为什么我在这里).我的猜测是它可能与其中一个图像中的alpha有关(因为这真的是唯一不同于两个 - 一个是alpha而另一个没有)但是这不太可能因为我能够加载其他一些有alpha的纹理.我真的很难过.
提前致谢.
为了保持简单,我将只编码/解码单个字节。
\n\n如果我对字节 127 进行编码,我会得到 base64 字符串“fw==”,它可以成功解码回字节 127。但是,如果我对字节 \xe2\x89\xa5 128 进行编码,那么即使我可以生成没有错误的 Base64 字符串(例如,字节 128 给出字符串“gA==”),当我尝试对其进行解码时出现错误。
\n\n这是我的代码,可以将其复制粘贴到任何 Xcode Playground 中以重现该问题:
\n\nfunc stringToByteArray(string: String) -> [UInt8] {\n var bytes: [UInt8] = [];\n for code in string.utf8 {\n bytes.append(UInt8(code));\n }\n return bytes;\n}\n\nfunc byteArrayToBase64(bytes: [UInt8]) -> String {\n let nsdata: NSData = NSData(bytes: bytes as [Byte], length: bytes.count)\n let base64Encoded: NSString = nsdata.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0));\n return String(base64Encoded);\n}\n\nfunc base64ToByteArray(base64String: String) -> [UInt8] {\n let nsdata: NSData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))!\n let base64Decoded: …Run Code Online (Sandbox Code Playgroud)