使用Dynamic C程序(语言为C),我试图将int转换为4个字节长的字节数组。到目前为止,我已经在线查看,并找到了一些例子。但是,似乎没有一个对我有用。我一直存在打印正确字节数的问题,但出于某种原因它们会重复两次。我提供了以下代码:
void main(){
int a=1379;
int i=0;
unsigned char value [4];
value[3] = (byte) (a & (0xFF));
value[2] = (byte) ((a >> 8) & 0xFF);
value[1] = (byte) ((a >> 16) & 0xFF);
value[0] = (byte) ((a >> 24) & 0xFF);
//convert int values to bytes by placing them in a char buffer
for(i=0;i<4;i++){
printf("%d",value[i]);
printf(", ");
}
printf("\n");
}
例如,使用此值时,程序将打印“5,09,5,99”,此时应打印“0,0,5,99”。谢谢你的帮助。
答案 0 :(得分:4)
几乎可以肯定的是,“动态C”是一个16位int
的实现,对C来说是完全“合法的”。如果int
是16位,任何转换都是16位是模16,所以后两个位移复制前两个。
答案 1 :(得分:1)
您需要将int变量中的位复制到char数组中。您只需使用memcpy
这样做:
#include <stdio.h>
#include <string.h>
void split(int val, unsigned char *arr) {
memcpy(arr, &val, sizeof(int));
}
int main() {
unsigned char bytes[4];
split(1379, bytes);
printf("%d, %d, %d, %d\n", bytes[0], bytes[1], bytes[2], bytes[3]);
}
答案 2 :(得分:0)
#include <stdio.h>
#include <string.h>
int main(void){
int a=1379;
unsigned bot,top ;
unsigned char value [sizeof a];
memcpy (value, &a, sizeof value);
/* You can omit this loop if you are on a big-endian machine */
#if LITTLE_ENDIAN
for (bot =0, top = sizeof value; --top > bot; bot++) {
unsigned char tmp;
tmp = value[bot];
value [bot] = value[top];
value[top] = tmp;
}
#endif
for(bot=0;bot < sizeof value;bot++){
printf("%u", (unsigned int) value[bot]);
printf(", ");
}
printf("\n");
return 0;
}