gpt4 book ai didi

objective-c - 按位运算

转载 作者:行者123 更新时间:2023-12-03 17:30:29 26 4
gpt4 key购买 nike

- (void)pushDigitalJoin: (NSString*)joinNumber
{
char joinByteArray[] = {
0x05, 0x00, 0x06, 0x00, 0x00, 0x03, 0x27
};

int joinIntNumber = ([joinNumber intValue] - 1);
char *upperByte;
char *lowerByte;

NSString *decimalString = [NSString stringWithFormat:@"%i", 0xff];

*upperByte = joinIntNumber & [decimalString intValue];
*lowerByte = joinIntNumber >> 8;


joinByteArray[7]= *upperByte;
joinByteArray[8] = *lowerByte;

int i;
for (i = 0; i < sizeof(joinByteArray); i++) {

NSLog(@"joinByteArray: position-%i | value-%i",i,joinByteArray[i]);
}

}

基本上我有字节数组我需要根据“joinNumber”更改最后 2 个字节然后将这 2 个字节添加到数组中

但是我在 joinIntNumber >> 8 上遇到编译错误,并且上面使用 and 运算符的操作似乎不起作用。 (输出始终显示 39)

那么我如何正确使用这些按位运算符并将我的 2 个字节添加到数组中?

为反射(reflect)评论和显示输出而进行的更改(答案(:

   - (void)pushDigitalJoin: (NSString*)joinNumber
{
char joinByteArray[] = {
0x05, 0x00, 0x06, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00
};

int joinIntNumber = ([joinNumber intValue] - 1);
char upperByte = nil;
char lowerByte = nil;

// NSString *decimalString = [NSString stringWithFormat:@"%i", 0xff];

upperByte = joinIntNumber & 0xff;//[decimalString intValue];
lowerByte = joinIntNumber >> 8;


joinByteArray[7]= upperByte;
joinByteArray[8] = lowerByte;

int i;
for (i = 0; i < sizeof(joinByteArray); i++) {

NSLog(@"joinByteArray: position-%i | value-%x",i,joinByteArray[i]);
}
}

输出(连接数 = 5):

2011-08-26 11:06:07.554 Cameleon[2213:40b] joinByteArray: position-0 | value-52011-08-26 11:06:07.555 Cameleon[2213:40b] joinByteArray: position-1 | value-02011-08-26 11:06:07.557 Cameleon[2213:40b] joinByteArray: position-2 | value-62011-08-26 11:06:07.558 Cameleon[2213:40b] joinByteArray: position-3 | value-02011-08-26 11:06:07.559 Cameleon[2213:40b] joinByteArray: position-4 | value-02011-08-26 11:06:07.561 Cameleon[2213:40b] joinByteArray: position-5 | value-32011-08-26 11:06:07.562 Cameleon[2213:40b] joinByteArray: position-6 | value-272011-08-26 11:06:07.563 Cameleon[2213:40b] joinByteArray: position-7 | value-42011-08-26 11:06:07.564 Cameleon[2213:40b] joinByteArray: position-8 | value-0

最佳答案

so how do i correctly use these bitwise operators and get my 2bytes added to the array?

你不知道。该数组在堆栈上声明并具有固定大小(7 字节)。如果您尝试将值添加到末尾,您最终会破坏堆栈上的其他值,并可能损坏堆栈。

不相关但也有问题的是:

NSString *decimalString = [NSString stringWithFormat:@"%i", 0xff];

*upperByte = joinIntNumber & [decimalString intValue];

这真的没有任何意义...为什么你要从 int 创建一个字符串只是为了获取它的 intValue ?最好这样写:

*upperByte = joinIntNumber & 0xff;

还有一件事...您将 upperByte 和 lowerByte 声明为字符指针 (char*),但您没有将它们设置为指向任何特定的东西。因此,当您尝试设置它们指向的字符(如上一行所示)时,您最终会将这些值放入随机位置。

如果您想要一个可以修改的 C 数组,您应该声明一个足够大的数组来容纳您要添加的任何值,在本例中:

char joinByteArray[] = {
0x05, 0x00, 0x06, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00
};

您还可以使用 malloc() 和 friend 在堆上创建它,但是您需要一开始就将其设置得足够大以容纳额外的值,或者在之前使用 realloc() 根据需要增大数组添加您的新值。无论如何,不要写入超出数组末尾的内容。

关于objective-c - 按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com