poly8_bitslice()数组如果java.lang.IllegalArgumentException: x + width must be <= bitmap.width()
at android.graphics.Bitmap.createBitmap(Bitmap.java:667)
at android.graphics.Bitmap.createBitmap(Bitmap.java:634)
at de.krissini.server.Player.<init>(Player.java:26)
at de.krissini.server.GamePanel2.surfaceCreated(GamePanel2.java:62)
at android.view.SurfaceView.updateWindow(SurfaceView.java:580)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:176)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
为输入,则此输入将由函数char
转换为位(字节)。
转换后,我想将结果存储在intToBits()
变量中。这可能吗?
我可以连接long long
的结果吗?
我想用以下代码执行此操作:
intToBits()
答案 0 :(得分:0)
我不确定我是否完全理解你的问题,但你可以做这样的事情
char ch0 = 0xAA;
char ch1 = 0xBB;
char ch2 = 0xCC;
char ch3 = 0xDD;
long long int x = 0; // x is 0x00000000
x = (long long int)ch0; // x is 0x000000AA
x = x << 8; // x is 0x0000AA00
x = x | (long long int)ch1; // x is 0x0000AABB
x = x << 8; // x is 0x00AABB00
x = x | (long long int)ch2; // x is 0x00AABBCC
x = x << 8; // x is 0xAABBCC00
x = x | (long long int)ch3; // x is 0xAABBCCDD
在这种情况下,x将包含0xAABBCCDD
<<
运算符会将左手运算符的内容移动右手运算符指定的数字。因此0xAA << 8
将成为0xAA00
。请注意,它会在移动时在末尾添加零。
|
运算符将按位或按其两个操作数执行。那是一点一点或。因此,左手操作符的第一位将与右手操作符的第一位相对应,结果将放在结果的第一位。
任何事情或任何结果为零的结果都是如此
0xAA00 | 0x00BB
会导致
0xAABB
一般来说,一个附加功能将是
long long int bitAppend(long long int x, char ch) {
return ((x << 8) | (long long int)ch);
}
这个函数将获取你需要附加的长整数和附加到它的char,并返回附加的long long int。请注意,只要64位填满,高位就会被移出。
例如
long long int x = 0x1122334455667788
x = x << 8; // x now is 0x2233445566778800
这会导致x为0x2233445566778800
,因为long long int中只有64位,因此高阶位必须移出。