有以指定类型直接读取切片的方法么

gogoboy · 2018-04-08 18:12:41 · 1001 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-04-08 18:12:41 的主题,其中的信息可能已经有所发展或是发生改变。

c可以这样写直接将数组直接当作整形读出来

char* buf = {0x1,0x2,0x3,0x4}

int val = ((int)buf)

go有这么样的语法么?直接吧slice直接转换成整形读出来


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1001 次点击  
加入收藏 微博
5 回复  |  直到 2018-04-09 10:34:40
tk103331
tk103331 · #1 · 7年之前

不了解c,go的话,读出来类型转换不就行了int()

gogoboy
gogoboy · #2 · 7年之前
tk103331tk103331 #1 回复

不了解c,go的话,读出来类型转换不就行了int()

我是向直接在数组的地址上直接读取整形.类型转换是读取一个字节,然后将字节转换成整形.结果是不同的.

jarlyyn
jarlyyn · #3 · 7年之前

bytes转int吧。 这个至少有高低位啊

https://golang.org/pkg/encoding/binary/

gogoboy
gogoboy · #4 · 7年之前

我的帖子有错误 c的写法是 int val = ((int)buf) go的写法我也找到了.区别有二 其一:go的数组名并不是数组首个元素的地址 其二:指针强制转换要借住unsafe转换成void (int32)(unsafe.Pointer(&buf[0]))

gogoboy
gogoboy · #5 · 7年之前
gogoboygogoboy #4 回复

我的帖子有错误 c的写法是 int val = *((int*)buf) go的写法我也找到了.区别有二 其一:go的数组名并不是数组首个元素的地址 其二:指针强制转换要借住unsafe转换成void *(*int32)(unsafe.Pointer(&buf[0]))

我的帖子有错误 c的写法是 int val = ((int)buf)

go的写法我也找到了.

区别有二

其一:go的数组名并不是数组首个元素的地址

其二:指针强制转换要借住unsafe转换成void (int32)(unsafe.Pointer(&buf[0]))

我帖子c的写法没错,是发帖的时候删掉了所有的星号和换行.囧

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传