小编v64*_*v64的帖子

Go中的惯用切片拼接?

我有以下用于实现拼接的代码(即,给定一个字节片满,另一个字节片部分,以及一个int pos表示我想用部分覆盖的完整位置):

package main

import (
    "fmt"
    "bytes"
)

func main() {
    full := []byte{0,0,0,0,0,0,0}
    part := []byte{1,1,1}

    newFull1 := splice(full, part, 2)
    fmt.Println(newFull1)
    // [0 0 1 1 1 0 0]

    newFull2 := splice(full, part, 3)
    fmt.Println(newFull2)
    // [0 0 0 1 1 1 0]
}

func splice(full []byte, part []byte, pos int) []byte {
    return bytes.Join([][]byte{full[:pos], part, full[len(full[:pos])+len(part):]}, []byte{})
}
Run Code Online (Sandbox Code Playgroud)

基本上,我的方法执行3个字节切片的连接:完全的第一部分,不会被部分覆盖,全部部分,然后是完整的剩余部分.这样做有更好/更惯用的方法吗?我无法在标准库中找到实现此方法的方法.

go

4
推荐指数
1
解决办法
1600
查看次数

将存储为chars的十六进制字符串转换为C中的十进制

我按照代码中概述的方式给出了一个包含4位十六进制数字的字符串hex_txt,分成两个数组条目.我需要将其转换为十进制.以下是我这样做的方式.

unsigned char hex_txt[] = "\xAB\xCD";
unsigned char hex_num[5];
unsigned int dec_num;

sprintf(hex_num, "%.2x%.2x", (int)hex_txt[0], (int)hex_txt[1]);
printf("%s\n", hex_num);
sscanf(hex_num, "%x", &dec_num);
printf("%d\n", dec_num);
Run Code Online (Sandbox Code Playgroud)

有更快,更有效的方法吗?这是我目前的临时解决方案,但我想知道是否有正确的方法来做到这一点.

c hex scanf decimal

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

decimal ×1

go ×1

hex ×1

scanf ×1