通过连接以长整数存储位(字节)

时间:2017-03-19 12:47:49

标签: c arrays byte concatenation long-integer

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()

1 个答案:

答案 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位,因此高阶位必须移出。