Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将4字节数字复制到字符数组_C - Fatal编程技术网

C 将4字节数字复制到字符数组

C 将4字节数字复制到字符数组,c,C,我想将一个4字节的数字存储到一个字符数组中 uint32 u32_gen; u32_gen = func(X,Y,Z); u32_gen is 4 bytes. For example it's value is 65DA929D. I want to store this as: char buf[100] = {'\0'}; buffer[7]=65; buffer[8]=DA; buffer[9]=92; buffer[10]9D; 我所做的和卡住的: int num = 0;

我想将一个4字节的数字存储到一个字符数组中

uint32 u32_gen;

u32_gen = func(X,Y,Z);

u32_gen is 4 bytes. For example it's value is 65DA929D. I want to store this as:

char buf[100] = {'\0'};
buffer[7]=65;
buffer[8]=DA;
buffer[9]=92;
buffer[10]9D;
我所做的和卡住的:

int num = 0;

num = ((u32_gen & 0xFF000000) >> 24) ;  num value is 101
num = ((u32_gen & 0x00FF0000) >> 16) ;  num value is 218
num = ((u32_gen & 0x0000FF00) >> 8) ;   num value is 146
num = (u32_gen & 0x000000FF) ;          num value is 157   
我需要在每次计算之间将这个数值(十进制值)复制到缓冲区[7]…缓冲区[10]。我在Stackoverflow和其他书籍中读过几篇相关文章。我必须写一个程序来将这个数值从十进制转换成十六进制吗

您是否尝试过:

buffer[7] = (char)num;
...
另一种选择是宣布这样一个联盟:

union data
{
    char s[4];
    uint32 u32_gen;
} myData;
然后做一些事情,比如:

myData.u32_gen = func(X,Y,Z);
buffer[7] = myData.s[0];
buffer[8] = myData.s[1];
buffer[9] = myData.s[2];
buffer[10] = myData.s[3];

存储在每个
缓冲区[7]
中的值
buffer[10]
可以被视为十六进制或十进制(该值可以说只是二进制的)。如果你问的是“从十进制到十六进制的转换”,你应该先温习一下你的计算机科学和数学基础,然后再转到C..@KerrekSB+1的评论,如果你正在关注这篇文章的评论(包括问答)不要默默地笑,你的血管里有冰水。不,这不起作用。将数字转换为较少的位只会丢失所有较高的部分。但是你不需要较高的部分,你已经对值进行了位移位。我说的是你的第一行。这只会将最低(或小端号上的最高)分配给num[7],不,8,9,10答案中的第一行永远不会将多字节中未签名的任何较高字节存储到任何平台上的缓冲区[7]中,而不管endianness如何。lol,我想很明显,您需要再添加三行,用于8、9和10。我的错误。