列表

详情


EP9. 嵌入式小端转大端

描述

在学习机器的大小端表示后,牛牛又对两种模式之间的相互转换感兴趣了。现在牛牛输入一个数字n,假设它是以小端模式保存在机器的,请将其转换为大端方式保存时的值。

示例1

输入:

1

输出:

16777216

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 3ms, 内存消耗: 320KB, 提交时间: 2022-08-04

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
typedef union{
    int n;
    unsigned char arr[4];
} TEMP;

int convert(int n ) {
    TEMP temp;
    temp.n = n;
    
    n = (temp.arr[0] << 24) | (temp.arr[1] << 16) | (temp.arr[2] << 8) | temp.arr[3];
    return n;
}

C 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-08-04

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
typedef union
{
    int ival;
    char cval[4];
}u_int_char;

int convert(int n ) {
    u_int_char a, b;
    
    a.ival = n;
    
    b.cval[0] = a.cval[3];
    b.cval[1] = a.cval[2];
    b.cval[2] = a.cval[1];
    b.cval[3] = a.cval[0];
    
    return b.ival;
}

C 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-08-04

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
#define _swap(a, b) do {a ^= b; b ^= a; a ^= b;} while (0)
typedef union
{
    int w;
    char b[4];
} w_t;

int convert(int n ) {
    // write code here    
    w_t d;
    d.w = n;     
    _swap(d.b[0], d.b[3]);
    _swap(d.b[1], d.b[2]);    
    return d.w;
}

C 解法, 执行用时: 3ms, 内存消耗: 388KB, 提交时间: 2022-08-06

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int convert(int n ) {
    // write code here
    int m=0;
    char* p=&m,*q=&n;
    p[0]=q[3];
    p[1]=q[2];
    p[2]=q[1];
    p[3]=q[0];
    return m;
}

C 解法, 执行用时: 3ms, 内存消耗: 392KB, 提交时间: 2022-08-04

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int convert(int n ) {
    // write code here
    
    char *p1 = &n;
    char *p2 = p1 + sizeof(int) - 1;
    
    for(int i = 0; i < (sizeof(int) / 2); i++)
    {
        int temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
    
    return n;
}

上一题